脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python+Pygame实现趣味足球游戏

Python+Pygame实现趣味足球游戏

2023-01-27 13:20木木子学python Python

这篇文章主要为大家分享了一个基于Python和Pygame实现的一个趣味足球游戏,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下

导语

​足球运动有着“世界第一运动”的美称,还是全球最具影响力的体育运动项目之一。

​小小的足球在滚动中能释放满满的能量和快乐。

足球游戏不仅可以锻炼大家的协调和反应能力,还能提高身体素质哦~

喜欢足球的小可爱,这一期可以大饱眼福啦

小编准备出一期关于足球的编程代码给大家哦~还有那些喜欢看足球赛的可以自己上jio啦​

​​温馨提示:

足球游戏时,一定要注意。场地要安全,服装要选好。

刚刚吃饱饭,剧烈要不得。动前和动后,准备和放松。

我们爱足球,运动伴成长。你爱踢足球游戏嘛?!​

 

一、环境安装

1)各种素材(图片、视频等)

资料挺多滴,等下代码就只展示主要的一些代码哈!

Python+Pygame实现趣味足球游戏

2)运行环境 小编使用的环境:Python3、Pycharm社区版、Pygame 模块部分自带就不一一展示啦

模块安装:pip install -i https://pypi.douban.com/simple/+模块名

 

二、代码展示

如上图素材所示代码主要分为6段py代码!代码很多仅展示主程序

主程序

from __future__ import unicode_literals
import itertools, sys, time, random, math, pygame
from pygame.locals import *
from MyLibrary import *
from football import *
from IO import*

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()
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()
  
if __name__ == '__main__':
  pygame.init()
  screen = pygame.display.set_mode((1200, 800))
  pygame.display.set_caption("简单足球")
  font = pygame.font.Font(None, 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 += 1

 

三、效果展示

1)加载界面

Python+Pygame实现趣味足球游戏

2)开始游戏界面

Python+Pygame实现趣味足球游戏

3)开始游戏

Python+Pygame实现趣味足球游戏

​4)游戏运行

Python+Pygame实现趣味足球游戏

到此这篇关于Python+Pygame实现趣味足球游戏的文章就介绍到这了,更多相关Python Pygame足球游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7097097046322053150

延伸 · 阅读

精彩推荐
  • Pythonpython3 lambda表达式详解

    python3 lambda表达式详解

    本文主要给大家详细介绍的是Python3中的lambda表达式的语法和用法,非常的详细,有需要的小伙伴可以参考下...

    DechinPhy11112021-10-24
  • PythonVScode编写第一个Python程序HelloWorld步骤

    VScode编写第一个Python程序HelloWorld步骤

    VScode是微软去年推出的一款轻量级编辑器,功能上和Atom、Sublime Text、Vim类似,你可以通过配置将它打造成合适的IDE,这里简单介绍一下,需要的朋友可以参...

    gsls20080816102021-01-28
  • Pythonpytorch 搭建神经网络的实现

    pytorch 搭建神经网络的实现

    这篇文章主要介绍了pytorch 搭建神经网络,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    weixin_444579305222021-12-22
  • PythonPython写代码的七条重要技巧介绍

    Python写代码的七条重要技巧介绍

    大家好,本篇文章主要讲的是Python写代码的七条重要技巧介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览...

    程序员涵涵20216802022-07-11
  • Python浅析Python中的join()方法的使用

    浅析Python中的join()方法的使用

    这篇文章主要介绍了Python中的join()方法的使用,是Python入门中的基础知识,需要的朋友可以参考下 ...

    脚本之家3972020-07-01
  • Pythonpython里 super类的工作原理详解

    python里 super类的工作原理详解

    这篇文章主要介绍了python里 super类的工作原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    kid_learning5292021-07-16
  • Python对Python3中dict.keys()转换成list类型的方法详解

    对Python3中dict.keys()转换成list类型的方法详解

    今天小编就为大家分享一篇对Python3中dict.keys()转换成list类型的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    WMN7Q6812021-05-26
  • PythonPandas中Series的创建及数据类型转换

    Pandas中Series的创建及数据类型转换

    这篇文章主要介绍了Pandas中Series的创建及数据类型转换,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下...

    菜鸟实战10992022-08-23