基于python快速开发足球游戏代码记录

简介: 基于python快速开发足球游戏代码记录

主要模块:

pygame

安装步骤:python -m pip install --upgrade pip


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()
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from pygame.locals import *
from MyLibrary import *
filename = 'p2.png'
filename2 = 'p1.png'
size_of_player = (32,47.5)
size_of_action = 4
size_of_playground = (1200,850)
dict_ = {(0,0):0,(-1, 0): 3, (1, 0): 0, (0, 1): 2, (0, -1): 1, (-1, 1): 2, (-1, -1): 1, (1, -1): 1, (1, 1): 2};
def player2_AI(myball,player,game_over,player_moving,Reference):
    x_bias,y_bias,X,Y = Reference
    TEMP = [0,0]
    player.direction = list(player.direction)
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]: sys.exit()
    if keys[K_UP]: TEMP[0] = -1
    if keys[K_RIGHT]: TEMP[1] = 1
    if keys[K_DOWN]: TEMP[0] = 1
    if keys[K_LEFT]: TEMP[1] = -1
    if keys[K_k] and myball.player == player: myball.kick_off()
    if ([0,0] == TEMP):
        player_moving = False
    else:
        player_moving = True
    if player_moving:
        player.direction = TEMP 
    which_column = dict_[tuple(player.direction)]
    if not game_over:
    # 根据角色的不同方向,使用不同的动画帧
        player.first_frame = which_column * player.columns
        player.last_frame = player.first_frame + player.columns - 1
        if player.frame < player.first_frame:
            player.frame = player.first_frame
        # print(player.direction)
        if player.X >=0  and player.X <= 70 and player.Y >=255 and player.Y <=260:
            if player.direction[0] == 1:
                player.direction[0] = 0
        if player.X >=70 and player.X <=75 and player.Y >=260 and player.Y <=497:
            if player.direction[1] == -1:
                player.direction[1] =0
        if player.X >=0  and player.X <= 70 and player.Y >=497 and player.Y <=502:
            if player.direction[0] == -1:
                player.direction[0] = 0
        if player.X >=1080 and player.X <= 1200 and player.Y >=255 and player.Y <260:
            if player.direction[0] == 1:
                player.direction[0] = 0
        if player.X > 1075 and player.X <= 1080 and player.Y >=260 and player.Y <  503:
            if player.direction[1] == 1:
                player.direction[1] =0
        if player.X >=1080 and player.X <= 1200 and player.Y >=503 and player.Y <=507:
            if player.direction[0] == -1:
                player.direction[0] = 0
        if not player_moving:
            # 当停止按键(即人物停止移动的时候),停止更新动画帧
            player.frame = player.last_frame= player.first_frame 
            player.moving = False;
        else:
            player.moving = True;
            player.velocity.x = player.direction[1] * 2
            player.velocity.y = player.direction[0]*   2
            player.velocity.x *= 1
            player.velocity.y *= 1
        if player_moving:
            X += player.velocity.x
            Y += player.velocity.y
            if X < 0: X = 0
            if X > size_of_playground[0] - 48: X = size_of_playground[0] - 48
            if Y < 0: Y = 0
            if Y > size_of_playground[1] - 88: Y = size_of_playground[1] - 88
            player.X = X + x_bias
            player.Y = Y + y_bias
    # Reference = x_bias,y_bias,X,Y
    Reference[0] = x_bias
    Reference[1]= y_bias
    Reference[2] = X
    Reference[3] = Y
def player1_AI(myball,player,game_over,player_moving,Reference):
    x_bias,y_bias,X,Y = Reference
    TEMP = [0,0]
    player.direction = list(player.direction)
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]: sys.exit()
    if keys[K_w]: TEMP[0] = -1
    if keys[K_d]: TEMP[1] = 1
    if keys[K_s]: TEMP[0] = 1
    if keys[K_a]: TEMP[1] = -1
    if keys[K_t] and myball.player == player: myball.kick_off()
    if ([0,0] == TEMP):
        player_moving = False
    else:
        player_moving = True
    if player_moving:
        player.direction = TEMP 
    which_column = dict_[tuple(player.direction)]
        # print(player.direction)
        # print(which_column)
    if not game_over:
    # 根据角色的不同方向,使用不同的动画帧
        player.first_frame = which_column * player.columns
        player.last_frame = player.first_frame + player.columns - 1
        if player.frame < player.first_frame:
            player.frame = player.first_frame
        if player.X >=0  and player.X <= 70 and player.Y >=255 and player.Y <=260:
            if player.direction[0] == 1:
                player.direction[0] = 0
        if player.X >=70 and player.X <=75 and player.Y >=260 and player.Y <=497:
            if player.direction[1] == -1:
                player.direction[1] =0
        if player.X >=0  and player.X <= 70 and player.Y >=497 and player.Y <=502:
            if player.direction[0] == -1:
                player.direction[0] = 0
        if player.X >=1080 and player.X <= 1200 and player.Y >=255 and player.Y <260:
            if player.direction[0] == 1:
                player.direction[0] = 0
        if player.X > 1075 and player.X <= 1080 and player.Y >=260 and player.Y <503:
            if player.direction[1] == 1:
                player.direction[1] =0
        if player.X >=1080 and player.X <= 1200 and player.Y >=503 and player.Y <507:
            if player.direction[0] == -1:
                player.direction[0] = 0
        if not player_moving:
            # 当停止按键(即人物停止移动的时候),停止更新动画帧
            player.frame = player.first_frame = player.last_frame
            player.moving = False;
        else:
            player.moving = True;
            player.velocity.x = player.direction[1] * 2
            player.velocity.y = player.direction[0]*  2
            player.velocity.x *= 1
            player.velocity.y *= 1
        if player_moving:
            X += player.velocity.x
            Y += player.velocity.y
            if X < 0: X = 0
            if X > size_of_playground[0] - 48: X = size_of_playground[0] - 48
            if Y < 0: Y = 0
            if Y > size_of_playground[1] - 88: Y = size_of_playground[1] - 88
            player.X = X + x_bias
            player.Y = Y + y_bias
    Reference[0] = x_bias
    Reference[1]= y_bias
    Reference[2] = X
    Reference[3] = Y
from __future__ import unicode_literals
import sys, time, random, math, pygame
from pygame.locals import *
from math import pow
class ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image_list = []
        self.image = None
        self.frame = 0
        self.old_frame = 0
        self.first_frame = 0
        self.last_frame = 2
        self.direction = list([0,0])
        self.speed = 0;
        self.fetch = False;
        self.f = 1.7
        self.last_time = 0;
        self.player = None
        self.cal = 0
    def _getx(self): return self.rect.x
    def _setx(self,value):self.rect.x = value
    X = property(_getx,_setx)
    #Y property
    def _gety(self):return self.rect.y
    def _sety(self,value):self.rect.y = value
    Y = property(_gety,_sety)
    #position property
    def _getpos(self): return self.rect.topleft
    def _setpos(self,pos): self.rect.topleft = pos
    position = property(_getpos,_setpos)
    def load(self):
        filename = 'ball1.png','ball2.png','ball3.png'
        for x in filename:
          ball = pygame.image.load(x).convert_alpha()
          self.image_list.append(ball)
        self.frame = 0;
        self.old_frame = 2;
        self.image = self.image_list[0];
        self.frame_height = self.image_list[0].get_rect().height
        self.frame_width = self.image_list[0].get_rect().width
        self.rect = Rect(0,0,self.frame_width,self.frame_height);
    def update(self,current_time,rate =30):
        if self.fetch and self.player.moving:
            self.speed = (self.player.velocity.x **2 + self.player.velocity.y **2)**(1/2)
        if self.speed == 0 or (self.fetch and self.player.moving == False):
            return
        if current_time > self.last_time + (4-self.speed//4)*20:
          self.frame += 1
          self.frame %= 3
          self.last_time = current_time
        if self.frame != self.old_frame:
          self.image = self.image_list[self.frame]
          self.old_frame = self.frame
    def run(self):
        self.speed -= self.f*0.05;
        self.speed = max(0,self.speed)
        if(self.direction==[0,0]):return;
        # print(self.direction)
        # print(self.speed)
        self.X += ((self.direction[0]*self.speed)/pow((self.direction[1]**2 + self.direction[0]**2),(1/2)))
        self.Y += ((self.direction[1]*self.speed)/pow((self.direction[0]**2 + self.direction[1]**2),(1/2)))
    def fetched(self,player_):
        self.fetch = True;
        if player_ != None:
            self.player = player_
        player = self.player
        if(player.direction[1] >0):
          self.X = self.player.X + self.player.frame_width*3/4
        else :
          self.X = self.player.X - self.player.frame_width/3
        self.Y = self.player.Y + self.player.frame_height -self.frame_height;
    def kick_off(self):
        self.speed = 12
        self.direction[0] = self.player.direction[1]
        self.direction[1]  =self.player.direction[0]
        self.player = None
        self.fetch =False
        self.cal = 0
    def check_bound(self,width,height):
        temp = self.X,self.Y
        if self.X < 0:
            self.X =0
            self.direction[0] = abs(self.direction[0])
        if self.Y < 0:
            self.Y = 0
            self.direction[1] = abs(self.direction[1])
        if self.X >width-34:
            self.X= width-34
            self.direction[0] = -1*abs(self.direction[0])
        if self.Y > height-14:
            self.Y = height-14;
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >=0 and self.X <72 and self.Y >300 - 17 and self.Y <315 - 17:
            self.Y = 300-17
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >1110 and self.X <1200 and self.Y >300 - 17 and self.Y <315 - 17:
            self.Y = 300-17
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >=0 and self.X <72 and self.Y >495 and self.Y <510:
            self.Y = 510 
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >1110 and self.X <1200 and self.Y >495 and self.Y <510:
            self.Y = 510
            self.direction[1] = -1*abs(self.direction[1])
        if((self.X,self.Y) != temp):
            self.speed *= 0.8
from __future__ import unicode_literals
import sys, time, random, math, pygame
from pygame.locals import *
from math import pow
class ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image_list = []
        self.image = None
        self.frame = 0
        self.old_frame = 0
        self.first_frame = 0
        self.last_frame = 2
        self.direction = list([0,0])
        self.speed = 0;
        self.fetch = False;
        self.f = 1.7
        self.last_time = 0;
        self.player = None
        self.cal = 0
    def _getx(self): return self.rect.x
    def _setx(self,value):self.rect.x = value
    X = property(_getx,_setx)
    #Y property
    def _gety(self):return self.rect.y
    def _sety(self,value):self.rect.y = value
    Y = property(_gety,_sety)
    #position property
    def _getpos(self): return self.rect.topleft
    def _setpos(self,pos): self.rect.topleft = pos
    position = property(_getpos,_setpos)
    def load(self):
        filename = 'ball1.png','ball2.png','ball3.png'
        for x in filename:
          ball = pygame.image.load(x).convert_alpha()
          self.image_list.append(ball)
        self.frame = 0;
        self.old_frame = 2;
        self.image = self.image_list[0];
        self.frame_height = self.image_list[0].get_rect().height
        self.frame_width = self.image_list[0].get_rect().width
        self.rect = Rect(0,0,self.frame_width,self.frame_height);
    def update(self,current_time,rate =30):
        if self.fetch and self.player.moving:
            self.speed = (self.player.velocity.x **2 + self.player.velocity.y **2)**(1/2)
        if self.speed == 0 or (self.fetch and self.player.moving == False):
            return
        if current_time > self.last_time + (4-self.speed//4)*20:
          self.frame += 1
          self.frame %= 3
          self.last_time = current_time
        if self.frame != self.old_frame:
          self.image = self.image_list[self.frame]
          self.old_frame = self.frame
    def run(self):
        self.speed -= self.f*0.05;
        self.speed = max(0,self.speed)
        if(self.direction==[0,0]):return;
        # print(self.direction)
        # print(self.speed)
        self.X += ((self.direction[0]*self.speed)/pow((self.direction[1]**2 + self.direction[0]**2),(1/2)))
        self.Y += ((self.direction[1]*self.speed)/pow((self.direction[0]**2 + self.direction[1]**2),(1/2)))
    def fetched(self,player_):
        self.fetch = True;
        if player_ != None:
            self.player = player_
        player = self.player
        if(player.direction[1] >0):
          self.X = self.player.X + self.player.frame_width*3/4
        else :
          self.X = self.player.X - self.player.frame_width/3
        self.Y = self.player.Y + self.player.frame_height -self.frame_height;
    def kick_off(self):
        self.speed = 12
        self.direction[0] = self.player.direction[1]
        self.direction[1]  =self.player.direction[0]
        self.player = None
        self.fetch =False
        self.cal = 0
    def check_bound(self,width,height):
        temp = self.X,self.Y
        if self.X < 0:
            self.X =0
            self.direction[0] = abs(self.direction[0])
        if self.Y < 0:
            self.Y = 0
            self.direction[1] = abs(self.direction[1])
        if self.X >width-34:
            self.X= width-34
            self.direction[0] = -1*abs(self.direction[0])
        if self.Y > height-14:
            self.Y = height-14;
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >=0 and self.X <72 and self.Y >300 - 17 and self.Y <315 - 17:
            self.Y = 300-17
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >1110 and self.X <1200 and self.Y >300 - 17 and self.Y <315 - 17:
            self.Y = 300-17
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >=0 and self.X <72 and self.Y >495 and self.Y <510:
            self.Y = 510 
            self.direction[1] = -1*abs(self.direction[1])
        if self.X >1110 and self.X <1200 and self.Y >495 and self.Y <510:
            self.Y = 510
            self.direction[1] = -1*abs(self.direction[1])
        if((self.X,self.Y) != temp):
            self.speed *= 0.8
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

5572a7fdb26b4e6db4ae8977b94d5d50.png


相关文章
|
5月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
335 100
|
5月前
|
开发者 Python
Python列表推导式:一行代码的艺术与力量
Python列表推导式:一行代码的艺术与力量
505 95
|
6月前
|
Python
Python的简洁之道:5个让代码更优雅的技巧
Python的简洁之道:5个让代码更优雅的技巧
334 104
|
6月前
|
开发者 Python
Python神技:用列表推导式让你的代码更优雅
Python神技:用列表推导式让你的代码更优雅
594 99
|
5月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
285 88
|
5月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1018 68
|
6月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
787 7
|
9月前
|
人工智能 搜索推荐 数据可视化
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
1123 1
|
Python
Python实现猜数字游戏
Python实现猜数字游戏
390 0

推荐镜像

更多