`

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压缩包可能包含了游戏...

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

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

    2023最新教程【樵夫教你学Python】Python全套教程 Python基础

    Python全套教程 Python基础python基础课代码+文档2023最新教程【樵夫教你学Python】Python全套教程 Python基础python基础课代码+文档2023最新教程【樵夫教你学Python】Python全套教程 Python基础python基础课代码+...

    python 下载 python 2.7.17

    Python下载 Python下载

    python3.7-python3.8-python3.9-python3.10对应的dlib安装包.whl.zip

    python3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython...

    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 组2022第十三届蓝桥杯大赛题目

    Python 编程基础知识点总结 Python 是一种高级的、解释型的编程语言,应用广泛,包括数据分析、人工智能、Web 开发等领域。蓝桥杯大赛是中国最具影响力的大学生程序设计竞赛,旨在激发大学生学习编程的兴趣和热情。...

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

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

    python实现按键精灵工具合集

    python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵工具合集python实现按键精灵...

    python小程序3 python小程序3 python小程序3 python小程序3

    在实际项目中,每个标签可能对应一个具体的小程序,如"是男人就勇敢点.exe"可能是一个决策树游戏,"是男人就跳100下.exe"可能是模拟跳跃游戏,利用Python的条件判断和循环控制实现。这样的练习有助于巩固编程技能,...

    数学建模常用的30个常用算法(Python代码).zip

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

Global site tag (gtag.js) - Google Analytics