Tank Game project is created using Python Programming Language. The Tank Game Python with Source Code used a Pygame and Random module.
Pygame is a cross-platform set of Python modules designed for writing video games. This is a game between a computer and the user. This simple Tank Game Python is a desktop application.
This Tank Game Python has the usage of the UP and DOWN keys you may manage the direction of your cannon.
Press LEFT-CTRL or LEFT-ALT to change the energy stage of the shoot. The SPACE key will release the cannonball.
The LEFT and RIGHT keys assist you in transporting your tank to the left and right. The primary goal of this game is to shoot and destroy the enemy’s tank.
Anyway, if you want to level up your knowledge in programming especially games in Python, try this new article I’ve made for you Code For Game in Python: Python Game Projects With Source Code.
Before you start on how to create Tank Game Python, make sure that you have PyCharm IDE and Pygame installed on your computer.
By the way, if you are new to Python programming and don’t know what the Python IDE is to use, I have here a list of the Best Python IDE for Windows, Linux, and Mac OS that will suit you.
I also have here How to Download and Install the Latest Version of Python on Windows.
How to Create Tank Game in Python: Step-by-step Guide
These are the steps on how to create Tank Game Python with Source Code.
- Step 1: Create a project name.
First, when you finished installing the Pycharm IDE on your computer, open it and then create a “project name.” After creating a project name click the “create” button.
- Step 2: Create a python file.
Second, after creating a project name, right-click your project name and then click “new.” After that click the “python file“.
- Step 3: Name your python file.
Third, after creating a Python file, Name your Python file after that click “enter“.
- Step 4: The actual code.
This is the actual coding on how to create Tank Game Python, and you are free to copy this code and download the full source code given below.
Importing Pygame Module
The code below, which is pygame library is an open-source module for the Python programming language specifically intended to help you make games and other multimedia applications. Pygame can run across many platforms and operating systems. (Python Source Code for Tank Game)
import pygame
Importing Random Module
In the code below. which is for the random() function, which generates random numbers between 0 and 1.(Python Source Code for Tank Game)
import random
This module is for the design main window
The code given below is for the design of the main screen window colors, the title of the game, and the background image.
display_width = 800 display_height = 600 game_layout_display = pygame.display.set_mode((display_width, display_height)) pygame.display.set_caption('Tanks Game - Brought To You By Itsourcecode.com') Resources = pygame.image.load("resources/game_background.png") pygame.display.set_icon(Resources) # colors wheat = (245, 222, 179) white = (255, 255, 255) black = (0, 0, 0) blue = (0, 0, 255) red = (200, 0, 0) light_red = (255, 0, 0) yellow = (200, 200, 0) light_yellow = (255, 255, 0) green = (34, 177, 76) light_green = (0, 255, 0)
This module is for the geometry of the tank
In the code given below, which is for the geometry of tank width and height.
tnk_width = 40 tnk_height = 20 tur_width = 5 whl_width = 5
This module is for the font size
In the code given below, which is for the font size use such as small, medium, large, and very small.
s_font = pygame.font.SysFont("Times New Roman", 25) m_font = pygame.font.SysFont("Times New Roman", 50) l_font = pygame.font.SysFont("Times New Roman", 85) vs_font = pygame.font.SysFont("Times New Roman", 25)
This module is for the score
In the code given below, which is for the defining score function.
def Score(Score): txt = s_font.render("Score: " + str(Score), True, white) game_layout_display.blit(txt, [0, 0])
This module is for the player tank
In the code given below, which is for the function of the player tank, defining turrets position and wheels dimension.(Python Source Code for Tank Game)
def tank(x, y, turret_position): x = int(x) y = int(y) pos_Turrets = [(x - 27, y - 2), (x - 26, y - 5), (x - 25, y - 8), (x - 23, y - 12), (x - 20, y - 14), (x - 18, y - 15), (x - 15, y - 17), (x - 13, y - 19), (x - 11, y - 21) ] pygame.draw.circle(game_layout_display, blue, (x, y), int(tnk_height / 2)) pygame.draw.rect(game_layout_display, blue, (x - tnk_height, y, tnk_width, tnk_height)) pygame.draw.line(game_layout_display, blue, (x, y), pos_Turrets[turret_position], tur_width) pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 5, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 5, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 15, y + 20), whl_width) return pos_Turrets[turret_position]
This module is for the computer tank
In the code given below, which is for the function of the computer tank, defining turret position and wheel dimension.
def computer_tank(x, y, turret_position): x = int(x) y = int(y) pos_Turrets = [(x + 27, y - 2), (x + 26, y - 5), (x + 25, y - 8), (x + 23, y - 12), (x + 20, y - 14), (x + 18, y - 15), (x + 15, y - 17), (x + 13, y - 19), (x + 11, y - 21) ] pygame.draw.circle(game_layout_display, blue, (x, y), int(tnk_height / 2)) pygame.draw.rect(game_layout_display, blue, (x - tnk_height, y, tnk_width, tnk_height)) pygame.draw.line(game_layout_display, blue, (x, y), pos_Turrets[turret_position], tur_width) pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x - 5, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 5, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 10, y + 20), whl_width) pygame.draw.circle(game_layout_display, blue, (x + 15, y + 20), whl_width) return pos_Turrets[turret_position]
This module is for the game control
The code given below is for the function of the game control screen.
def game_ctrls(): gameControl = True while gameControl: for event in pygame.event.get(): # print(event) if event.type == pygame.QUIT: pygame.quit() quit() game_layout_display.fill(black) msg_screen("Controls", white, -100, size="large") msg_screen("Fire: Spacebar", wheat, -30) msg_screen("Move Turret: Up and Down arrows", wheat, 10) msg_screen("Move Tank: Left and Right arrows", wheat, 50) msg_screen("Press D to raise Power % AND Press A to lower Power % ", wheat, 140) msg_screen("Pause: P", wheat, 90) btn("Play", 150, 500, 100, 50, green, light_green, action="play") btn("Main", 350, 500, 100, 50, yellow, light_yellow, action="main") btn("Quit", 550, 500, 100, 50, red, light_red, action="quit") pygame.display.update() clock.tick(15)
This module is for the buttons
In the code given below, which is for the function of buttons having action calls and text.
def btn(txt, x, y, width, height, inactive_color, active_color, action=None,size=" "): cursor = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() # print(click) if x + width > cursor[0] > x and y + height > cursor[1] > y: pygame.draw.rect(game_layout_display, active_color, (x, y, width, height)) if click[0] == 1 and action != None: if action == "quit": pygame.quit() quit() if action == "controls": game_ctrls() if action == "play": gameLoop() if action == "main": game_intro() else: pygame.draw.rect(game_layout_display, inactive_color, (x, y, width, height)) txt_btn(txt, black, x, y, width, height)
This module is for the explosion of the tank
In the code given below, which is for the function for explosion of both tanks.
def explosion(x, y, size=50): exp = True while exp: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() startPoint = x, y choice_colors = [red, light_red, yellow, light_yellow] mgntde = 1 while mgntde < size: exploding_bit_x = x + random.randrange(-1 * mgntde, mgntde) exploding_bit_y = y + random.randrange(-1 * mgntde, mgntde) pygame.draw.circle(game_layout_display, choice_colors[random.randrange(0, 4)], (exploding_bit_x, exploding_bit_y), random.randrange(1, 5)) mgntde += 1 pygame.display.update() clock.tick(100) exp = False
This module is for the firing of player tank
In the code given below, which is for the function of firing for the player tank.
def playerfireShell(xy, tankx, tanky, turPost, gun_power, xloc, bar_width, ranHeight, eTankX, eTankY): fire = True damage = 0 startShell = list(xy) print("FIRE!", xy) while fire: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() # print(startingShell[0],startingShell[1]) pygame.draw.circle(game_layout_display, red, (startShell[0], startShell[1]), 5) startShell[0] -= (12 - turPost) * 2 # y = x**2 startShell[1] += int( (((startShell[0] - xy[0]) * 0.015 / (gun_power / 50)) ** 2) - (turPost + turPost / (12 - turPost))) if startShell[1] > display_height - grnd_height: print("Last shell:", startShell[0], startShell[1]) hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1]) hit_y = int(display_height - grnd_height) print("Impact:", hit_x, hit_y) if eTankX + 10 > hit_x > eTankX - 10: print("Critical Hit!") damage = 25 elif eTankX + 15 > hit_x > eTankX - 15: print("Hard Hit!") damage = 18 elif eTankX + 25 > hit_x > eTankX - 25: print("Medium Hit") damage = 10 elif eTankX + 35 > hit_x > eTankX - 35: print("Light Hit") damage = 5 explosion(hit_x, hit_y) fire = False check_x_1 = startShell[0] <= xloc + bar_width check_x_2 = startShell[0] >= xloc check_y_1 = startShell[1] <= display_height check_y_2 = startShell[1] >= display_height - ranHeight if check_x_1 and check_x_2 and check_y_1 and check_y_2: print("Last shell:", startShell[0], startShell[1]) hit_x = int((startShell[0])) hit_y = int(startShell[1]) print("Impact:", hit_x, hit_y) explosion(hit_x, hit_y) fire = False pygame.display.update() clock.tick(60) return damage
This module is for the firing of the computer tank
In the code given below, which is for the function of firing for the computer tank.
def computerfireShell(xy, tankx, tanky, turPost, gun_power, xloc, bar_width, ranHeight, ptankx, ptanky): damage = 0 cPower = 1 pow_found = False while not pow_found: cPower += 1 if cPower > 100: pow_found = True # print(currentPower) fire = True startShell = list(xy) while fire: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() # pygame.draw.circle(gameDisplay, red, (startingShell[0],startingShell[1]),5) startShell[0] += (12 - turPost) * 2 startShell[1] += int( (((startShell[0] - xy[0]) * 0.015 / (cPower / 50)) ** 2) - (turPost + turPost / (12 - turPost))) if startShell[1] > display_height - grnd_height: hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1]) hit_y = int(display_height - grnd_height) # explosion(hit_x,hit_y) if ptankx + 15 > hit_x > ptankx - 15: print("target acquired!") power_found = True fire = False check_x_1 = startShell[0] <= xloc + bar_width check_x_2 = startShell[0] >= xloc check_y_1 = startShell[1] <= display_height check_y_2 = startShell[1] >= display_height - ranHeight if check_x_1 and check_x_2 and check_y_1 and check_y_2: hit_x = int((startShell[0])) hit_y = int(startShell[1]) # explosion(hit_x,hit_y) fire = False fire = True startShell = list(xy) print("FIRE!", xy) while fire: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() pygame.draw.circle(game_layout_display, red, (startShell[0], startShell[1]), 5) startShell[0] += (12 - turPost) * 2 gun_power = random.randrange(int(cPower * 0.90), int(cPower * 1.10)) startShell[1] += int( (((startShell[0] - xy[0]) * 0.015 / (gun_power / 50)) ** 2) - (turPost + turPost / (12 - turPost))) if startShell[1] > display_height - grnd_height: print("last shell:", startShell[0], startShell[1]) hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1]) hit_y = int(display_height - grnd_height) print("Impact:", hit_x, hit_y) if ptankx + 10 > hit_x > ptankx - 10: print("Critical Hit!") damage = 25 elif ptankx + 15 > hit_x > ptankx - 15: print("Hard Hit!") damage = 18 elif ptankx + 25 > hit_x > ptankx - 25: print("Medium Hit") damage = 10 elif ptankx + 35 > hit_x > ptankx - 35: print("Light Hit") damage = 5 explosion(hit_x, hit_y) fire = False check_x_1 = startShell[0] <= xloc+ bar_width check_x_2 = startShell[0] >= xloc check_y_1 = startShell[1] <= display_height check_y_2 = startShell[1] >= display_height - ranHeight if check_x_1 and check_x_2 and check_y_1 and check_y_2: print("Last shell:", startShell[0], startShell[1]) hit_x = int((startShell[0])) hit_y = int(startShell[1]) print("Impact:", hit_x, hit_y) explosion(hit_x, hit_y) fire = False pygame.display.update() clock.tick(60) return damage
This module is for the game over-screen
In the code given below, which is for the function of game over screen.
def game_over(): game_over = True while game_over: for event in pygame.event.get(): # print(event) if event.type == pygame.QUIT: pygame.quit() quit() game_layout_display.fill(black) msg_screen("Game Over", white, -100, size="large") msg_screen("You died.", wheat, -30) btn("Play Again", 150, 500, 150, 50, wheat, light_green, action="play") btn("Controls", 350, 500, 100, 50, wheat, light_yellow, action="controls") btn("Quit", 550, 500, 100, 50, wheat, light_red, action="quit") pygame.display.update() clock.tick(15)
This module is for the player winner screen
In the code given below, which is for the function of the player winner screen
def you_win(): win = True while win: for event in pygame.event.get(): # print(event) if event.type == pygame.QUIT: pygame.quit() quit() game_layout_display.fill(black) msg_screen("You won!", white, -100, size="large") msg_screen("Congratulations!", wheat, -30) btn("play Again", 150, 500, 150, 50, wheat, light_green, action="play") btn("controls", 350, 500, 100, 50, wheat, light_yellow, action="controls") btn("quit", 550, 500, 100, 50, wheat, light_red, action="quit") pygame.display.update() clock.tick(15)
This module is for the health bars
The code is given below, which is for the function of the health bars of the player tank and computer tank.
def health_bars(p_health, e_health): if p_health > 75: p_health_color = green elif p_health > 50: p_health_color = yellow else: p_health_color = red if e_health > 75: e_health_color = green elif e_health > 50: e_health_color = yellow else: e_health_color = red pygame.draw.rect(game_layout_display, p_health_color, (680, 25, p_health, 25)) pygame.draw.rect(game_layout_display, e_health_color, (20, 25, e_health, 25))
Complete Source Code of Tank Game Python
import pygame
import random
pygame.init()
display_width = 800
display_height = 600
game_layout_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('Tanks Game - Brought To You By Itsourcecode.com')
Resources = pygame.image.load("resources/game_background.png")
pygame.display.set_icon(Resources)
# colors
wheat = (245, 222, 179)
white = (255, 255, 255)
black = (0, 0, 0)
blue = (0, 0, 255)
red = (200, 0, 0)
light_red = (255, 0, 0)
yellow = (200, 200, 0)
light_yellow = (255, 255, 0)
green = (34, 177, 76)
light_green = (0, 255, 0)
# for picking current time for the frames per second
clock = pygame.time.Clock()
# geometry of tank and its turret
tnk_width = 40
tnk_height = 20
tur_width = 5
whl_width = 5
grnd_height = 35
# fonts with size, for text_object function
s_font = pygame.font.SysFont("Times New Roman", 25)
m_font = pygame.font.SysFont("Times New Roman", 50)
l_font = pygame.font.SysFont("Times New Roman", 85)
vs_font = pygame.font.SysFont("Times New Roman", 25)
# defining score function
def Score(Score):
txt = s_font.render("Score: " + str(Score), True, white)
game_layout_display.blit(txt, [0, 0])
# defining function to get the fonts and sizes assigned with them by size names by default size="small"
def txt_object(txt, color, size="small"):
if size == "small":
txtSrfc = s_font.render(txt, True, color)
if size == "medium":
txtSrfc = m_font.render(txt, True, color)
if size == "large":
txtSrfc = l_font.render(txt, True, color)
if size == "vsmall":
txtSrfc = vs_font.render(txt, True, color)
return txtSrfc, txtSrfc.get_rect()
# function for texts that has to appear over button
def txt_btn(message, color, btnx, btny, btnwidth, btnheight, size="vsmall"):
txtSrf, textRect = txt_object(message, color, size)
textRect.center = ((btnx + (btnwidth / 2)), btny + (btnheight / 2))
game_layout_display.blit(txtSrf, textRect)
# function for texts that has to appear over screen
def msg_screen(message, color, y_displace=0, size="small"):
txtSrf, textRect = txt_object(message, color, size)
textRect.center = (int(display_width / 2), int(display_height / 2) + y_displace)
game_layout_display.blit(txtSrf, textRect)
# function for players tank , defining turrets positions and wheels dimensions
def tank(x, y, turret_position):
x = int(x)
y = int(y)
pos_Turrets = [(x - 27, y - 2),
(x - 26, y - 5),
(x - 25, y - 8),
(x - 23, y - 12),
(x - 20, y - 14),
(x - 18, y - 15),
(x - 15, y - 17),
(x - 13, y - 19),
(x - 11, y - 21)
]
pygame.draw.circle(game_layout_display, blue, (x, y), int(tnk_height / 2))
pygame.draw.rect(game_layout_display, blue, (x - tnk_height, y, tnk_width, tnk_height))
pygame.draw.line(game_layout_display, blue, (x, y), pos_Turrets[turret_position], tur_width)
pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 5, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 5, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 15, y + 20), whl_width)
return pos_Turrets[turret_position]
# function for computers tank , defining turrets positions and wheels dimensions
def computer_tank(x, y, turret_position):
x = int(x)
y = int(y)
pos_Turrets = [(x + 27, y - 2),
(x + 26, y - 5),
(x + 25, y - 8),
(x + 23, y - 12),
(x + 20, y - 14),
(x + 18, y - 15),
(x + 15, y - 17),
(x + 13, y - 19),
(x + 11, y - 21)
]
pygame.draw.circle(game_layout_display, blue, (x, y), int(tnk_height / 2))
pygame.draw.rect(game_layout_display, blue, (x - tnk_height, y, tnk_width, tnk_height))
pygame.draw.line(game_layout_display, blue, (x, y), pos_Turrets[turret_position], tur_width)
pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 15, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x - 5, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 5, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 10, y + 20), whl_width)
pygame.draw.circle(game_layout_display, blue, (x + 15, y + 20), whl_width)
return pos_Turrets[turret_position]
# Game control Screen
def game_ctrls():
gameControl = True
while gameControl:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
game_layout_display.fill(black)
msg_screen("Controls", white, -100, size="large")
msg_screen("Fire: Spacebar", wheat, -30)
msg_screen("Move Turret: Up and Down arrows", wheat, 10)
msg_screen("Move Tank: Left and Right arrows", wheat, 50)
msg_screen("Press D to raise Power % AND Press A to lower Power % ", wheat, 140)
msg_screen("Pause: P", wheat, 90)
btn("Play", 150, 500, 100, 50, green, light_green, action="play")
btn("Main", 350, 500, 100, 50, yellow, light_yellow, action="main")
btn("Quit", 550, 500, 100, 50, red, light_red, action="quit")
pygame.display.update()
clock.tick(15)
# function for buttons having action calls and text on it callings
def btn(txt, x, y, width, height, inactive_color, active_color, action=None,size=" "):
cursor = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
# print(click)
if x + width > cursor[0] > x and y + height > cursor[1] > y:
pygame.draw.rect(game_layout_display, active_color, (x, y, width, height))
if click[0] == 1 and action != None:
if action == "quit":
pygame.quit()
quit()
if action == "controls":
game_ctrls()
if action == "play":
gameLoop()
if action == "main":
game_intro()
else:
pygame.draw.rect(game_layout_display, inactive_color, (x, y, width, height))
txt_btn(txt, black, x, y, width, height)
# function for pause having transparent background, uncommenting fill statement will make it black
def pause():
paused = True
msg_screen("Paused", white, -100, size="large")
msg_screen("Press C to continue playing or Q to quit", wheat, 25)
pygame.display.update()
while paused:
# gameDisplay.fill(black)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
paused = False
elif event.key == pygame.K_q:
pygame.quit()
quit()
clock.tick(5)
# function for barrier
def barrier(x_loc, ran_height, bar_width):
pygame.draw.rect(game_layout_display, green, [x_loc, display_height - ran_height, bar_width, ran_height])
# function for explosion for both tanks
def explosion(x, y, size=50):
exp = True
while exp:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
startPoint = x, y
choice_colors = [red, light_red, yellow, light_yellow]
mgntde = 1
while mgntde < size:
exploding_bit_x = x + random.randrange(-1 * mgntde, mgntde)
exploding_bit_y = y + random.randrange(-1 * mgntde, mgntde)
pygame.draw.circle(game_layout_display, choice_colors[random.randrange(0, 4)], (exploding_bit_x, exploding_bit_y),
random.randrange(1, 5))
mgntde += 1
pygame.display.update()
clock.tick(100)
exp = False
# firing function for players tank
def playerfireShell(xy, tankx, tanky, turPost, gun_power, xloc, bar_width, ranHeight, eTankX, eTankY):
fire = True
damage = 0
startShell = list(xy)
print("FIRE!", xy)
while fire:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# print(startingShell[0],startingShell[1])
pygame.draw.circle(game_layout_display, red, (startShell[0], startShell[1]), 5)
startShell[0] -= (12 - turPost) * 2
# y = x**2
startShell[1] += int(
(((startShell[0] - xy[0]) * 0.015 / (gun_power / 50)) ** 2) - (turPost + turPost / (12 - turPost)))
if startShell[1] > display_height - grnd_height:
print("Last shell:", startShell[0], startShell[1])
hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1])
hit_y = int(display_height - grnd_height)
print("Impact:", hit_x, hit_y)
if eTankX + 10 > hit_x > eTankX - 10:
print("Critical Hit!")
damage = 25
elif eTankX + 15 > hit_x > eTankX - 15:
print("Hard Hit!")
damage = 18
elif eTankX + 25 > hit_x > eTankX - 25:
print("Medium Hit")
damage = 10
elif eTankX + 35 > hit_x > eTankX - 35:
print("Light Hit")
damage = 5
explosion(hit_x, hit_y)
fire = False
check_x_1 = startShell[0] <= xloc + bar_width
check_x_2 = startShell[0] >= xloc
check_y_1 = startShell[1] <= display_height
check_y_2 = startShell[1] >= display_height - ranHeight
if check_x_1 and check_x_2 and check_y_1 and check_y_2:
print("Last shell:", startShell[0], startShell[1])
hit_x = int((startShell[0]))
hit_y = int(startShell[1])
print("Impact:", hit_x, hit_y)
explosion(hit_x, hit_y)
fire = False
pygame.display.update()
clock.tick(60)
return damage
# firing function for computer's tank
def computerfireShell(xy, tankx, tanky, turPost, gun_power, xloc, bar_width, ranHeight, ptankx, ptanky):
damage = 0
cPower = 1
pow_found = False
while not pow_found:
cPower += 1
if cPower > 100:
pow_found = True
# print(currentPower)
fire = True
startShell = list(xy)
while fire:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# pygame.draw.circle(gameDisplay, red, (startingShell[0],startingShell[1]),5)
startShell[0] += (12 - turPost) * 2
startShell[1] += int(
(((startShell[0] - xy[0]) * 0.015 / (cPower / 50)) ** 2) - (turPost + turPost / (12 - turPost)))
if startShell[1] > display_height - grnd_height:
hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1])
hit_y = int(display_height - grnd_height)
# explosion(hit_x,hit_y)
if ptankx + 15 > hit_x > ptankx - 15:
print("target acquired!")
power_found = True
fire = False
check_x_1 = startShell[0] <= xloc + bar_width
check_x_2 = startShell[0] >= xloc
check_y_1 = startShell[1] <= display_height
check_y_2 = startShell[1] >= display_height - ranHeight
if check_x_1 and check_x_2 and check_y_1 and check_y_2:
hit_x = int((startShell[0]))
hit_y = int(startShell[1])
# explosion(hit_x,hit_y)
fire = False
fire = True
startShell = list(xy)
print("FIRE!", xy)
while fire:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
pygame.draw.circle(game_layout_display, red, (startShell[0], startShell[1]), 5)
startShell[0] += (12 - turPost) * 2
gun_power = random.randrange(int(cPower * 0.90), int(cPower * 1.10))
startShell[1] += int(
(((startShell[0] - xy[0]) * 0.015 / (gun_power / 50)) ** 2) - (turPost + turPost / (12 - turPost)))
if startShell[1] > display_height - grnd_height:
print("last shell:", startShell[0], startShell[1])
hit_x = int((startShell[0] * display_height - grnd_height) / startShell[1])
hit_y = int(display_height - grnd_height)
print("Impact:", hit_x, hit_y)
if ptankx + 10 > hit_x > ptankx - 10:
print("Critical Hit!")
damage = 25
elif ptankx + 15 > hit_x > ptankx - 15:
print("Hard Hit!")
damage = 18
elif ptankx + 25 > hit_x > ptankx - 25:
print("Medium Hit")
damage = 10
elif ptankx + 35 > hit_x > ptankx - 35:
print("Light Hit")
damage = 5
explosion(hit_x, hit_y)
fire = False
check_x_1 = startShell[0] <= xloc+ bar_width
check_x_2 = startShell[0] >= xloc
check_y_1 = startShell[1] <= display_height
check_y_2 = startShell[1] >= display_height - ranHeight
if check_x_1 and check_x_2 and check_y_1 and check_y_2:
print("Last shell:", startShell[0], startShell[1])
hit_x = int((startShell[0]))
hit_y = int(startShell[1])
print("Impact:", hit_x, hit_y)
explosion(hit_x, hit_y)
fire = False
pygame.display.update()
clock.tick(60)
return damage
# function for power level of players tank
def power(level):
text = s_font.render("Power: " + str(level) + "%", True, wheat)
game_layout_display.blit(text, [display_width / 2, 0])
# function for intro screen
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
intro = False
elif event.key == pygame.K_q:
pygame.quit()
quit()
game_layout_display.fill(black)
msg_screen("Welcome to Tanks War!", white, -100, size="Medium")
msg_screen("The goal is to shoot and destroy", wheat, 15)
msg_screen("the enemy tank before they destroy you.", wheat, 60)
msg_screen("The more enemies you destroy, the highest score you get.", wheat, 110)
msg_screen("Brought To You by :itsourcecode.com", wheat, 280)
# message_to_screen("Press C to play, P to pause or Q to quit",black,180)
btn("Play", 150, 500, 100, 50, wheat, light_green, action="play",size="vsmall")
btn("Controls", 350, 500, 100, 50, wheat, light_yellow, action="controls",size="vsmall")
btn("Quit", 550, 500, 100, 50, wheat, light_red, action="quit",size="vsmall")
pygame.display.update()
clock.tick(15)
# function for game Over screen
def game_over():
game_over = True
while game_over:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
game_layout_display.fill(black)
msg_screen("Game Over", white, -100, size="large")
msg_screen("You died.", wheat, -30)
btn("Play Again", 150, 500, 150, 50, wheat, light_green, action="play")
btn("Controls", 350, 500, 100, 50, wheat, light_yellow, action="controls")
btn("Quit", 550, 500, 100, 50, wheat, light_red, action="quit")
pygame.display.update()
clock.tick(15)
# function for players win screen
def you_win():
win = True
while win:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
game_layout_display.fill(black)
msg_screen("You won!", white, -100, size="large")
msg_screen("Congratulations!", wheat, -30)
btn("play Again", 150, 500, 150, 50, wheat, light_green, action="play")
btn("controls", 350, 500, 100, 50, wheat, light_yellow, action="controls")
btn("quit", 550, 500, 100, 50, wheat, light_red, action="quit")
pygame.display.update()
clock.tick(15)
# function for health bars of both tanks
def health_bars(p_health, e_health):
if p_health > 75:
p_health_color = green
elif p_health > 50:
p_health_color = yellow
else:
p_health_color = red
if e_health > 75:
e_health_color = green
elif e_health > 50:
e_health_color = yellow
else:
e_health_color = red
pygame.draw.rect(game_layout_display, p_health_color, (680, 25, p_health, 25))
pygame.draw.rect(game_layout_display, e_health_color, (20, 25, e_health, 25))
# function for main gameloop
def gameLoop():
gExit = False
gOver = False
FPS = 15
p_health = 100
e_health = 100
bar_width = 50
mTankX = display_width * 0.9
mTankY = display_height * 0.9
tnkMove = 0
curTurPost = 0
changeTurs = 0
eTankX = display_width * 0.1
eTankY = display_height * 0.9
f_power = 50
p_change = 0
xloc = (display_width / 2) + random.randint(-0.1 * display_width, 0.1 * display_width)
ranHeight = random.randrange(display_height * 0.1, display_height * 0.6)
while not gExit:
if gOver == True:
# gameDisplay.fill(white)
msg_screen("Game Over", red, -50, size="large")
msg_screen("Press C to play again or Q to exit", black, 50)
pygame.display.update()
while gOver == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gExit = True
gOver = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
gameLoop()
elif event.key == pygame.K_q:
gExit = True
gOver = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
gExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
tnkMove = -5
elif event.key == pygame.K_RIGHT:
tnkMove = 5
elif event.key == pygame.K_UP:
changeTurs = 1
elif event.key == pygame.K_DOWN:
changeTurs= -1
elif event.key == pygame.K_p:
pause()
elif event.key == pygame.K_SPACE:
damage = playerfireShell(gun, mTankX, mTankY, curTurPost, f_power, xloc, bar_width,
ranHeight, eTankX, eTankY)
e_health -= damage
posMovement = ['f', 'r']
moveInd = random.randrange(0, 2)
for x in range(random.randrange(0, 10)):
if display_width * 0.3 > eTankX > display_width * 0.03:
if posMovement[moveInd] == "f":
eTankX += 5
elif posMovement[moveInd] == "r":
eTankX -= 5
game_layout_display.fill(black)
health_bars(p_health, e_health)
gun = tank(mTankX, mTankY, curTurPost)
e_gun = computer_tank(eTankX, eTankY, 8)
f_power += p_change
power(f_power)
barrier(xloc, ranHeight, bar_width)
game_layout_display.fill(green,
rect=[0, display_height - grnd_height, display_width, grnd_height])
pygame.display.update()
clock.tick(FPS)
damage = computerfireShell(e_gun, eTankX, eTankY, 8, 50, xloc, bar_width,
ranHeight, mTankX, mTankY)
p_health -= damage
elif event.key == pygame.K_a:
p_change = -1
elif event.key == pygame.K_d:
p_change = 1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
tnkMove = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
changeTurs = 0
if event.key == pygame.K_a or event.key == pygame.K_d:
p_change = 0
mTankX += tnkMove
curTurPost += changeTurs
if curTurPost > 8:
curTurPost = 8
elif curTurPost < 0:
curTurPost = 0
if mTankX - (tnk_width / 2) < xloc + bar_width:
mTankX += 5
game_layout_display.fill(black)
health_bars(p_health, e_health)
gun = tank(mTankX, mTankY, curTurPost)
e_gun = computer_tank(eTankX, eTankY, 8)
f_power += p_change
if f_power > 100:
f_power = 100
elif f_power < 1:
f_power = 1
power(f_power)
barrier(xloc, ranHeight, bar_width)
game_layout_display.fill(green, rect=[0, display_height - grnd_height, display_width, grnd_height])
pygame.display.update()
if p_health < 1:
game_over()
elif e_health < 1:
you_win()
clock.tick(FPS)
pygame.quit()
quit()
game_intro()
gameLoop()
How to Run the Tank Game Python with Source Code?
To run this project, you must have installed a Pycharm on your PC (for Windows). Tank Game Python with Source Code is for educational purposes only!
After downloading the project you must follow the steps below:
Step 1: Unzip the file or Extract the file.
Step 2: Double-click the TankGame.
Step 3: The project is ready to run.
Downloadable Source Code
I have here the list of Best Python Projects with Source code free to download for free, I hope this can help you a lot.
Summary
That’s how you create Tank Game Python in your projects. You can always expand and try different ways to implement the Tank Game Python in your Python projects.
Tank Game Python is free to download the open source code and it is used for educational purposes only.
Check out the different Python-related projects below:
- Snake Game In Python Code
- How to Make a Bouncing Ball Game in Python with Source Code
- How to Create a Rock-Paper-Scissor Game in Python
Inquiries
If you have any questions or suggestions about Tank Game Python with Source Code, please feel free to leave a comment below.
The code doesn’t run
It shows Filenotfound error :No such file or directory
In line 7 of the “Design Main Window”