`

Python 是男人就坚持30秒

 
阅读更多




 
 闲着没事写了一个学生时代的游戏,是男人就坚持30秒,用了两天时间写好。

之后想写一个塔防游戏,目前思路没有想好。

有附件,欢迎下载。

更新一下版本,增加秒数计时器:

import pygame
from sys import exit
import GuaiWuA
import Hero
import datetime

pygame.init()   # 初始化
screen = pygame.display.set_mode((800,600)) # 定义窗体大小
pygame.display.set_caption('盛世再见')  # 游戏名称

running = True  # 游戏主循环标记
clock = pygame.time.Clock() # 定义帧数

# 顶
ding1 = pygame.draw.rect(screen,(99, 105, 20),(0, 20, 390,10))   # 绘制地图
ding2 = pygame.draw.rect(screen,(99, 105, 20),(410, 20, 390,10))
# 底
di1 = pygame.draw.rect(screen,(99, 105, 20),(0, 590, 390,10))
di2 = pygame.draw.rect(screen,(99, 105, 20),(410, 590, 390,10))
# 左
zuo1 = pygame.draw.rect(screen,(99, 105, 20),(0, 10, 10,280))
zuo2 = pygame.draw.rect(screen,(99, 105, 20),(0, 310, 10,280))
# 右
you1 = pygame.draw.rect(screen,(99, 105, 20),(790, 10, 10,280))
you2 = pygame.draw.rect(screen,(99, 105, 20),(790, 310, 10,290))
collidelist = [ding1,ding2,di1,di2,zuo1,zuo2,you1,you2]

hero = Hero.Hero(screen)    # 创建英雄
i = 0   # 碰撞一次+1        # 怪物碰撞墙体次数
index = 0                   # 怪物是否与墙体碰撞
guai = GuaiWuA.GuaiWuA(screen,0) # pygame.draw.rect(screen, (255, 255, 255), (400, 300, 10,10)) # 初始化一个怪
guaiList = [guai]   #初始化怪list
pygame.event.set_allowed([pygame.KEYDOWN, pygame.KEYUP])    # 设置监听事件
gameOver = False    # 游戏是否结束

starttime = datetime.datetime.now() # 计时
while running:
    clock.tick(60)  #设置帧数
    for event in pygame.event.get():    # 事件队列
        if event.type == pygame.QUIT:   # 退出事件
            exit();                     # 退出程序
        elif event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:    # 判断类型
            hero.moveHero(event)    # 移动英雄
    hero.drawHero()     # 绘制英雄至最新位置
    for gx in guaiList:     # 迭代怪物列表
        pygame.draw.rect(screen, (0, 0, 0), gx.guai)    # 覆盖前一路径的方形,将颜色设置成与背景一样
        index = gx.guai.collidelist(collidelist)    # 检测碰撞
        if index != 0:  # 大于-1代表碰撞
            i += 1      # 碰撞次数+1
        gx.setIndex(index)  # 设置怪的移动轨迹
        if (gx.flag):   # 判断怪是否超出游戏窗口
            idx = guaiList.index(gx)    # 超出游戏窗口获取序列
            guaiList.pop(idx)           # 根据序列清除超出窗口的元素
        if gx.collide(hero.hero):       # 怪物英雄碰撞检测
            i = -9                      # 设置出怪索引为-9
            gameOver = True             # 游戏结束标记
            hero.flag = False
    if gameOver:
        guaiList = []                   # 清空怪物序列
    else:
        pygame.draw.rect(screen, (0, 0, 0), (20, 0, 60, 20))
        endtime = datetime.datetime.now()
        currentSeconds = (endtime - starttime).seconds
        score_font = pygame.font.Font(None, 36)
        score_text = score_font.render(str(currentSeconds), True, (128, 128, 128))
        text_rect = score_text.get_rect()
        text_rect.topleft = [20, 0]
        screen.blit(score_text, text_rect)

    if i % 8 == 0:                      # 怪碰撞8次墙体生成一个新的怪
        guaiList.append(GuaiWuA.GuaiWuA(screen,0))  # 生成一个怪

    pygame.display.update()             # 刷新窗口

    # pygame.display.flip()

 

import pygame

class Hero():
    speed = [0, 0]
    hero = None
    screen = None
    flag = True
    def __init__(self,screen):
        self.screen = screen
        self.hero = pygame.draw.rect(screen, (255, 127, 63), (20, 20, 10, 10))

    def moveHero(self,event):
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                self.speed[1] = self.speed[1] - 3
                if self.speed[1] < -5:
                    self.speed[1] = -5
            elif event.key == pygame.K_DOWN:
                self.speed[1] = self.speed[1] + 3
                if self.speed[1] > 5:
                    self.speed[1] = 5
            elif event.key == pygame.K_LEFT:
                self.speed[0] = self.speed[0] - 3
                if self.speed[0] < -5:
                    self.speed[0] = -5
            elif event.key == pygame.K_RIGHT:
                self.speed[0] = self.speed[0] + 3
                if self.speed[0] > 5:
                    self.speed[0] = 5
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                self.speed[1] = 0
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                self.speed[0] = 0

    def drawHero (self):
        if self.speed[0] != 0 or self.speed[1] != 0:
            pygame.draw.rect(self.screen, (0, 0, 0), self.hero)
        if self.flag:
            self.hero = self.hero.move(self.speed)
            pygame.draw.rect(self.screen, (255, 127, 63), self.hero)

 

import pygame
import random

class GuaiWuA():
    offsetX = 0
    offsetY = 0
    screen = None
    guai = None
    flag = False
    index = 0
    def __init__(self,screen,index):
        self.offsetX = random.randint(-3, 3)
        self.offsetY = random.randint(-3, 3)
        self.index = index
        self.screen = screen
        self.guai = pygame.draw.rect(self.screen, (255, 255, 255), (400, 300, 5, 5))

    def setIndex(self,index):
        self.index = index
        self.setOffet()
        self.guai = self.guai.move(self.offsetX, self.offsetY)
        xPont = self.guai.x
        yPont = self.guai.y
        if xPont > 810 or yPont > 610 or xPont < -10 or yPont < -10:
            self.flag = True
        pygame.draw.rect(self.screen, (255, 255, 255), self.guai)

    def collide(self,hero):
        gameOver = self.guai.colliderect(hero)
        return gameOver


    def setOffet(self):
        if self.index == 0:
            self.offsetX = random.randint(-3, 0)
            self.offsetY = random.randint(0, 3)
        elif self.index == 1:
            self.offsetX = random.randint(-3, 0)
            self.offsetY = random.randint(0, 3)
        elif self.index == 2:
            self.offsetX = random.randint(0, 3)
            self.offsetY = random.randint(-3, 0)
        elif self.index == 3:
            self.offsetX = random.randint(0, 3)
            self.offsetY = random.randint(-3, 0)
        elif self.index == 4:
            self.offsetX = random.randint(0, 3)
            self.offsetY = random.randint(0, 3)
        elif self.index == 5:
            self.offsetX = random.randint(0, 3)
            self.offsetY = random.randint(0, 3)
        elif self.index == 6:
            self.offsetX = random.randint(-3, 0)
            self.offsetY = random.randint(-3, 0)
        elif self.index == 7:
            self.offsetX = random.randint(-3, 0)
            self.offsetY = random.randint(-3, 0)

 以上是全部代码,第一篇代码为主逻辑,第二篇为英雄逻辑,第三篇为怪逻辑。

  • 大小: 60.1 KB
  • 大小: 57.5 KB
分享到:
评论

相关推荐

    Pygame游戏源代码:是男人就坚持20秒

    《Pygame游戏源代码:是男人就坚持20秒》是一款基于Python的Pygame库开发的趣味小游戏。Pygame是Python编程语言的一个模块,专为创建2D游戏和多媒体应用程序而设计。它提供了丰富的功能,包括图形绘制、音频处理、...

    Python是男人就下一百层小游戏源代码

    在"Python是男人就下一百层小游戏源代码"这个项目中,我们有两个核心的程序文件:`game.py`和`是男人就下一百层.py`。这两个文件共同构成了游戏的全部逻辑。 首先,`game.py`通常会包含游戏的基本框架和一些通用的...

    多线程实例—是男人就坚持30秒

    这个名为"多线程实例—是男人就坚持30秒"的项目可能是一个编程挑战或者教学示例,旨在帮助开发者理解如何有效地利用多线程来实现并发执行任务。 在Java、Python、C#等许多编程语言中,多线程是核心特性之一,它能够...

    PYTHON_GAME_39坚持100秒.zip

    标题“PYTHON_GAME_39坚持100秒.zip”表明这是一个使用Python开发的游戏,可能是某种挑战用户反应速度或耐力的计时游戏。游戏的目标可能是让玩家在100秒内完成特定任务或保持某种状态。这个zip压缩包可能包含了游戏...

    是男人就下一百层游戏源码

    易语言编写 是男人就下一百层游戏源码。@q1287166316。

    数学建模30个常用算法(Python)

    数学建模30个常用算法(Python)数学建模30个常用算法(Python)数学建模30个...Python数学建模30个常用算法(Python)数学建模30个常用算法(Python)数学建模30个常用算法(Python)数学建模30个常用算法(Python)

    是男人就下一百层街机python

    标题 "是男人就下一百层街机python" 暗示我们要讨论的是使用 Python 编程语言重制经典街机游戏 "是男人就下一百层"。这个游戏原版是一款非常受欢迎的挑战玩家反应速度和策略的游戏,玩家需要控制角色安全地下降楼层...

    python 下载 python 2.7.17

    Python下载 Python下载

    Python 商城源码 Python源码

    Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 Python源码Python 商城源码 ...

    Python Python Python Python

    Python Python Python Python

    python python python python python

    除此之外,Python的第三方库也非常发达,如NumPy和Pandas用于科学计算和数据分析,Matplotlib和Seaborn用于数据可视化,Django和Flask则为Web开发提供了强大的框架。 在学习Python时,理解并掌握这些基本概念至关...

    九大学科30节Python学科编程课程体系ppt课件

    九大学科30节Python学科编程课程体系ppt课件九大学科30节Python学科编程课程体系ppt课件九大学科30节Python学科编程课程体系ppt课件九大学科30节Python学科编程课程体系ppt课件九大学科30节Python学科编程课程体系...

    python教程 python教程 python教程

    python教程python教程python教程python教程python教程python教程python教程python教程python教程

    python的python的python

    pythonpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txt...

    Python入门-选择Python版本

    Python是一种广泛使用的高级编程语言,尤其在Web开发、数据分析、人工智能等领域有着广泛应用。对于初学者而言,选择合适的Python版本是入门的第一步。Python有两个主要的活跃版本:Python 2 和 Python 3。这两个...

    Python BBS论坛源码 Python源码

    Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python...

    python3.10.10安装包集合

    对于嵌入式版本,开发者需要将解压的内容集成到他们的应用程序中,这样程序就可以在没有全局Python环境的情况下运行Python代码。 总结起来,这个压缩包提供了Python 3.10.10的多种安装方式,覆盖了Windows 32位和64...

    ubuntu安装python3.9 ubuntu安装python3.9

    在Ubuntu系统中,安装Python 3.9是一个常见的需求,特别是在新版本的Ubuntu如22.04 LTS中,预装的Python版本可能是...记得在安装第三方模块时,使用相应的Python版本管理工具(如pip3.9),确保模块安装在正确的位置。

    Python Excel数据分析 Python源码

    Python Excel数据分析 Python源码Python Excel数据分析 Python源码Python Excel数据分析 Python源码Python Excel数据分析 Python源码Python Excel数据分析 Python源码Python Excel数据分析 Python源码Python Excel...

    python-3.11.0 python-3.11.0 下载

    python-3.11.0 python-3.11.0 下载

Global site tag (gtag.js) - Google Analytics