The principle is introduced
This is a small game for two, divided into red and blue. Of course, each team has three players and a goalkeeper. Each player can control one player, and the other three are controlled by computers. Red players control player movement by “W”, “A”, “S”, “D”, and “T” kick the ball. For the blue side, use ↑, ↓, ←, → to control the movement of the player, and “K” kicks the ball. The space bar is to start the game, the following is the effect of the whole course. Now that we know the rules of the game, we can start writing the game. First, we need to initialize the game:
def myinit(): Screen = pygame.display.set_mode((769,563)) g1 = Pygame.image.load ("g1.jpg").convert() g2 = pygame.image.load("hh.png").convert() t = 0 timer = pygame.time.Clock() while(1): timer.tick(30) ticks = pygame.time.get_ticks(); for event in pygame.event.get(): if event.type == QUIT: Pygame.quit () sys.exit() screen.blit(g1,(0,0)) t+= 1 print(t) if t > 66: break; pygame.display.update() while(1): timer.tick(30) ticks = pygame.time.get_ticks(); for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == MOUSEBUTTONUP: mouse_up = event.button mouse_up_x,mouse_up_y = event.pos if mouse_up_x > 245 and mouse_up_x < 469 and mouse_up_y> 368 And mouse_up_y < 470: return screen.blit(g2,(0,0)) pygame.display.update()Copy the code
And then part of the code:
def bias(x, y):
x = x + 16
y = y + 24
x_cent = 0
y_cent = 0
if (x >= 100 and x <= 700):
x_cent = -1 * x + 100
elif (x > 700):
x_cent = -600
else:
x_cent = 0
if (y >= 75 and y <= 525):
y_cent = -1 * y + 75
elif (y > 525):
y_cent = -450
else:
y_cent = 0
return x_cent, y_cent
def draw_background(screen):
rc = (255, 255, 255)
rp = (600, 400)
rr = 80
width = 5
screen.fill((0,100,0))
pygame.draw.circle(screen, rc, rp, rr, width)
pygame.draw.rect(screen, (255, 255, 255), (10, 10, 600, 790), 5)
pygame.draw.rect(screen, (255, 255, 255), (600, 10, 590, 790), 5)
pygame.draw.rect(screen, (255, 255, 255), (10, 150, 300, 500), 5)
pygame.draw.rect(screen, (255, 255, 255), (890, 150, 300, 500), 5)
def draw_ball_goal(screen):
goal1 = pygame.image.load("goal1.bmp").convert()
goal2 = pygame.image.load("goal2.bmp").convert()
screen.blit(goal1,(8,305))
screen.blit(goal2,(1121,305))
def begin_a_game(n1,n2):
nn = 0
filename = 'p2.png'
filename2 = 'p1.png'
size_of_player = (32,47.5)
size_of_action = 4
size_of_playground = (1920,1080)
dict_ = {(-1, 0): 3, (1, 0): 0, (0, 1): 2, (0, -1): 1, (-1, 1): 3, (-1, -1): 1, (1, -1): 0, (1, 1): 2};
x_bias = 0
y_bias = 0
kick_off = 0
player_group = pygame.sprite.Group()
player_group1 = pygame.sprite.Group()
player_group2 = pygame.sprite.Group()
player = MySprite()
X, Y = random.randint(250,500),random.randint(350-25,450-25)
# x_bias, y_bias = bias(X, Y);
player.load(filename, size_of_player[0], size_of_player[1], size_of_action)
player.position = X + x_bias, Y + y_bias
player.direction = 1,0
player.tag =1
player_group.add(player)
player_group1.add(player)
player2 = MySprite()
X2,Y2 = random.randint(700,950),random.randint(350-25,450-25)
player2.load(filename2, size_of_player[0], size_of_player[1], size_of_action)
player2.position = X2 + x_bias, Y2 + y_bias
player2.direction = 1,0
player2.tag = 2
player_group.add(player2)
player_group2.add(player2)
b_X,b_Y = 1200/2,800/2;
ball_group = pygame.sprite.Group()
myball = ball()
myball.load()
myball.position = b_X+x_bias,b_Y+y_bias
ball_group.add(myball)
p1 = robot()
p1.leader = player
p1.ball = myball
p1.goal_pos = [892,399]
p1.tag = 1
p1.goal = [1120,405]
p1.other_group = player_group2
p1.load("p3.png", size_of_player[0], size_of_player[1], size_of_action)
p1.X,p1.Y = random.randint(250,500),random.randint(50-25,350-25)
p1.direction = 1,0
player_group1.add(p1)
player_group.add(p1)
pp2 = robot_B()
pp2.leader = p1
pp2.ball = myball
pp2.goal_pos = [892,399]
pp2.goal = [1120,405]
pp2.tag = 1
pp2.wonder = 300;
pp2.other_group = player_group2
pp2.load("p3.png", size_of_player[0], size_of_player[1], size_of_action)
pp2.X,pp2.Y = random.randint(250,500),random.randint(450-25,750-25)
pp2.direction = 1,0
player_group1.add(pp2)
player_group.add(pp2)
d1 = defence()
d1.leader = player
d1.ball = myball
d1.wonder = 85
d1.tag = 1
d1.other_group = player_group2
d1.load("p3.png", size_of_player[0], size_of_player[1], size_of_action)
d1.X,d1.Y = 85,390
d1.direction = 1,0
player_group1.add(d1)
player_group.add(d1)
t = robot()
t.leader = player2
t.ball = myball
t.tag = 2
t.other_group = player_group1
t.goal_pos = [309,389]
t.goal = [70,405]
t.load("p4.png", size_of_player[0], size_of_player[1], size_of_action)
t.X,t.Y = random.randint(700,950),random.randint(50-25,350-25)
t.direction = 1,0
player_group2.add(t)
player_group.add(t)
r = t;
t = robot_B()
t.leader = r
t.goal = [70,405]
t.ball = myball
t.wonder = 900
t.tag = 2
t.other_group = player_group1
t.goal_pos = [309,389]
t.load("p4.png", size_of_player[0], size_of_player[1], size_of_action)
t.X,t.Y = random.randint(700,950),random.randint(450-25,750-25)
t.direction = 1,0
player_group2.add(t)
player_group.add(t)
d2 = defence2()
d2.leader = player2
d2.ball = myball
d2.wonder = 1070
d2.tag = 2
d2.other_group = player_group1
d2.load("p4.png", size_of_player[0], size_of_player[1], size_of_action)
d2.X,d2.Y = 1070,390
d2.direction = 1,0
player_group2.add(d2)
player_group.add(d2)
game_over = False
player_moving = False
player2_moving =False
while True:
timer.tick(50)
ticks = pygame.time.get_ticks()
myball.cal +=1;
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if nn == 0.00001:
keys = pygame.key.get_pressed()
if keys[K_ESCAPE]: sys.exit()
if keys[K_SPACE]:nn+=0.00001
continue
nn+=0.00001
mx, my = pygame.mouse.get_pos()
# print(str(mx)+" "+str(my))
# print(myball.position)
Reference = [x_bias,y_bias,X,Y]
player1_AI(myball,player,game_over,player_moving,Reference)
x_bias,y_bias,X,Y = Reference
Reference = [x_bias,y_bias,X2,Y2]
player2_AI(myball,player2,game_over,player2_moving,Reference)
x_bias,y_bias,X2,Y2 = Reference
# print(d1.shoot)
if d1.shoot == True or d2.shoot == True:
p1.state = "back"
pp2.state = "back"
r.state = "back"
t.state = "back"
player_group.update(ticks, 30)
if myball.cal > 10:
the_player = None
if myball.player == None:
the_player = pygame.sprite.spritecollideany(myball,player_group);
if the_player != None:
if pygame.sprite.collide_circle_ratio(1)(the_player,myball):
myball.fetched(the_player);
the_player.state = "catch"
if the_player == d1 or the_player == d2:
the_player.shoot =True;
elif myball.player.tag ==1:
the_player = pygame.sprite.spritecollideany(myball,player_group2);
if the_player != None:
if pygame.sprite.collide_circle_ratio(1)(the_player,myball):
if the_player != d1 and the_player != d2:
myball.player.state = "chase"
the_player.state = "catch"
myball.fetched(the_player)
elif myball.player.tag ==2:
the_player = pygame.sprite.spritecollideany(myball,player_group1);
if the_player != None:
if pygame.sprite.collide_circle_ratio(1)(the_player,myball):
if the_player != d1 and the_player != d2:
myball.player.state = "chase"
the_player.state = "catch"
myball.fetched(the_player)
# the_player = pygame.sprite.spritecollideany(myball,player_group);
# if the_player != None:
# if pygame.sprite.collide_circle_ratio(0.65)(the_player,myball):
# print("*********************************************************")
# if(myball.player!=None):
# player_group.add(myball.player);
# ball_group.remove(myball.player);
# myball.fetched(the_player);
# player_group.remove(the_player)
# ball_group.add(the_player)
myball.check_bound(1200,800)
if(myball.fetch):
myball.fetched(None)
print("kick_off")
else: myball.run()
# print(str(myball.X)+" "+str(myball.Y))
ball_group.update(ticks,60)
print(str(myball.X)+" "+str(myball.Y))
if myball.X < 60 and myball.Y >315 - 17 and myball.Y <495:
return 2
elif myball.X > 1110 and myball.Y >315 - 17 and myball.Y <495:
return 1
draw_background(screen)
if(myball.player!=None and myball.player.direction[0]>0):
player_group.draw(screen)
ball_group.draw(screen)
else:
ball_group.draw(screen)
player_group.draw(screen)
font = pygame.font.SysFont("", 150)
text_surface = font.render(str(n1)+" : "+str(n2), True, (0, 0, 255))
screen.blit(text_surface, (500, 10))
draw_ball_goal(screen)
pygame.display.update()
Copy the code
Start the game:
if __name__ == '__main__': pygame.init() screen = pygame.display.set_mode((1200, 800)) Pygame.display. Set_caption (" Simple ball -- right ") font = pygame.font. 36) myinit() timer = pygame.time.Clock() n1 = 0 n2 =0 screen = pygame.display.set_mode((1200, 800)) for x in range(10000): t = begin_a_game(n1,n2); if t == 1: n1 +=1 else: n2 += 1Copy the code
Take a look at the game effect
Start interface:
The game begins: