导语

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

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

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

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

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

​​温馨提示:

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

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

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

一、环境安装 

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

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

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)加载界面

2)开始游戏界面

3)开始游戏

​4)游戏运行

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

Python+Pygame实现趣味足球游戏的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. js中‘!.’是什么意思

  3. InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库

  4. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  5. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  6. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  7. 宝塔Linux的FTP连接不上的解决方法

    宝塔Linux的FTP连接不上的解决方法常见的几个可能,建议先排查。1.注意内网IP和外网IP2.检查ftp服务是否启动 (面板首页即可看到)3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 (如是腾讯云/阿里云等还需检查安全组)4.是否主动/被动模式都不能连接5.新建一个用户看是否能连接6.修改ftp配置文件 将ForcePassiveIP前面的#去掉 将19

  8. 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

  9. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部