python pygame 简单小游戏

python pygame 简单小游戏

最近学习了pygame,感觉十分有意思,花了一点时间制作了一个简单的小游戏

效果图

在这里插入图片描述
这是一个很简单的防守类小游戏
玩家可以使用wasd控制人物移动,并且鼠标控制人物旋转,发射元气弹消除敌人。敌人顺利到达城墙则玩家扣血,血量清零后游戏结束,反之坚持200秒则游戏胜利。

模块区

开头导入几个需要使用的模块和一个 Player类

import jieba
import os
import sys
import math
import random
import pygame
import datetime
from pygame.locals import *class Player(object):  #玩家 类def __init__(self, img, rect, speed):self.ful_img = imgself.img = self.ful_imgself.rect = rectself.speed = speedself.num = 0def update(self, screen, press_keys):  #键盘控制if press_keys[K_a]:self.rect.left -= self.speedif self.rect.left <= 0:self.rect.left = 0if press_keys[K_d]:self.rect.left += self.speedif self.rect.right >= 250:self.rect.right = 250if press_keys[K_w]:self.rect.top -= self.speedif self.rect.top <= 0:self.rect.top = 0if press_keys[K_s]:self.rect.top += self.speedif self.rect.bottom >= 800:self.rect.bottom = 800self.num += 1if self.num % 3 == 0:self.num = 0return [(self.rect.left + self.rect.right)/2, (self.rect.top + self.rect.bottom)/2], self.img

设置区

设置区包含了窗口设置区和基础设置区
基础设计区包含了游戏时间,玩家,城墙,元气弹,敌人等设计

if __name__ == '__main__':# 1 - 设置区# 1.1 - 窗口设置区white = (255, 255, 255)screen_width, screen_height = 1368, 800os.environ['SDL_VIDEO_CENTERED'] = '1'screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption("Python_Game")# 1.2 - 基础设置区pygame.init()pygame.font.init()font = pygame.font.SysFont('SimHei',32)start = 0win = 0running = 0distance = 200health_value = 194  health_value_max = 194  #最大血量fin_time = 200   #游戏时间start_time = datetime.datetime.now()rect_player = Rect(50, 50, 133, 142)   #玩家设置player_speed = 2player_pos = []monsters = []  #怪物设置monster_speed = 1wave_set = []  #元气弹设置wave_speed = 1.5wave_max = 2fig_path = r'C:\Users\Sakura\Desktop\pythongame\gamefile/'   paper = pygame.image.load(fig_path + 'paper.jpg').convert_alpha()   #背景paper = pygame.transform.scale(paper, (1368, 800))wall = pygame.image.load(fig_path + 'walls.png').convert_alpha()  #城墙wall_width = wall.get_width()wall_height = wall.get_height()player = pygame.image.load(fig_path + 'beggers.png').convert_alpha()  #玩家player_width = player.get_width()player_height = player.get_height()waves = pygame.image.load(fig_path + 'waves.png').convert_alpha()  #元气弹sub_wave = waves.subsurface(Rect((0, 0), (waves.get_width() / 5, waves.get_height())))sub_wave_width = sub_wave.get_width()sub_wave_height = sub_wave.get_height()monster_img1 = pygame.image.load(fig_path + 'monster1.png').convert_alpha()  #怪物图片monster_width = monster_img1.get_width()monster_height = monster_img1.get_height()monster_img = monster_img1health_bar_img = pygame.image.load(fig_path + "health.png")  #血条图片health_bar_height = health_bar_img.get_height()health_img = pygame.image.load(fig_path + "health.png")health_height = health_img.get_height()victory = pygame.image.load(fig_path + 'victory.jpg')   #胜利图片victory = pygame.transform.scale(victory, (1368, 800))game_over = pygame.image.load(fig_path + 'game_over.jpg')  #失败图片game_over = pygame.transform.scale(game_over, (1368, 800))start_img = pygame.image.load(fig_path + 'start.jpg').convert_alpha()  #游戏开始图片

游戏区

游戏区包含了 游戏开始,进行,结束三个区块
布局了玩家,城墙,元气弹,以及怪物的生成。此外还有元气弹于怪物抵消,血量扣除,胜负判断等数个操作。

    # 2 - 游戏区# 2.1 - 游戏开始区while not start:   #游戏开始前screen.fill(white)screen.blit(start_img, (0, 0))text = font.render("按空格开始游戏!",True, (250, 50, 200))text_Rect = text.get_rect()text_Rect.centerx = screen.get_rect().centerxtext_Rect.centery = screen.get_rect().centery + 200screen.blit(text, text_Rect)pygame.display.flip()for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == K_SPACE:start = 1running = 1pygame.mixer.music.load(fig_path + "bgm.mp3")pygame.mixer.music.play(1, 0.0)pygame.mixer.music.set_volume(0.15)start_time = datetime.datetime.now()PL = Player(player, rect_player, player_speed)  #生成玩家# 2.2 - 游戏进行区while running:# 2.2.1 - 游戏显示区screen.fill(white)screen.blit(paper, (0, 0))for height in range(0, screen_height, wall_height):  #城墙布局screen.blit(wall, (distance, height))press_keys = pygame.key.get_pressed()player_pos, player_img = PL.update(screen, press_keys)position = pygame.mouse.get_pos()  #鼠标控制玩家旋转angle = math.atan2(position[1] - (player_pos[1] + player_height),position[0] - (player_pos[0] + player_width))player_rot = pygame.transform.rotate(player_img, 360 - angle * 57.29)player_pos1 = (player_pos[0] - player_rot.get_rect().width / 2,player_pos[1] - player_rot.get_rect().height / 2)screen.blit(player_rot, player_pos1)for wave in wave_set:  #元气弹index = 0vel_x = math.cos(wave[0]) * wave_speedvel_y = math.sin(wave[0]) * wave_speedwave[1] += vel_xwave[2] += vel_yif wave[1] < - sub_wave_width or wave[1] > screen_width \or wave[2] < - sub_wave_height or wave[2] > screen_height:wave_set.pop(index)index += 1for projectile in wave_set:wave1 = pygame.transform.rotate(sub_wave, 360 - projectile[0] * 57.29)screen.blit(wave1, (projectile[1], projectile[2]))monster_timer = random.choice(range(200))if monster_timer < 1:monsters.append([screen_width,random.randint(monster_height, screen_height - monster_height)])index = 0for monster in monsters:   #怪物生成if monster[0] < - monster_width:monsters.pop(index)monster[0] -= monster_speedmonster_rect = pygame.Rect(monster_img.get_rect())monster_rect.top = monster[1]monster_rect.left = monster[0]if monster_rect.left < wall_width + distance:health_value -= random.randint(20, 50)monsters.pop(index)index1 = 0for wave in wave_set:wave_rect = pygame.Rect(sub_wave.get_rect())wave_rect.left = wave[1]wave_rect.top = wave[2]# 检查两个矩形块即怪物和元气弹是否交叉if monster_rect.colliderect(wave_rect):wave_set.pop(index1)try:monsters.pop(index)except IndexError as error:print("IndexError: " + str(error))index1 += 1index += 1for monster in monsters:screen.blit(monster_img, monster)font = pygame.font.Font(None, 42)   #游戏时间cur_time = datetime.datetime.now()play_time = (cur_time - start_time).secondsif play_time % 60 < 10:time_str = ":0"else:time_str = ":"survived_text = font.render(str(play_time // 60) +time_str +str(play_time % 60),True, (0, 0, 0))text_Rect = survived_text.get_rect()text_Rect.topright = [screen_width - 5, 5]screen.blit(survived_text, text_Rect)health_bar_img = pygame.transform.scale(health_bar_img,   #血量(health_value_max, health_bar_height))screen.blit(health_bar_img, [0, 5])if health_value < 0:health_value = 0health_img = pygame.transform.smoothscale(health_img,(health_value, health_height))screen.blit(health_img, [0, 5])pygame.display.flip()# 2.2.2 - 游戏操作区for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.MOUSEBUTTONDOWN and len(wave_set) < wave_max:position = pygame.mouse.get_pos()wave_set.append([math.atan2(position[1] - (player_pos1[1] + player_height),position[0] - (player_pos1[0] + player_width)),player_pos1[0], player_pos1[1]])if pygame.time.get_ticks() >= fin_time * 1000:running = 0win = 1if health_value == 0:running = 0win = 0#  2.3 游戏结束区while not running and start:pygame.mixer.music.stop()if win:screen.blit(victory, (0, 0))pygame.font.init()font = pygame.font.SysFont('SimHei',32)text = font.render("胜利 !",True, (250, 50, 200))text_Rect = text.get_rect()text_Rect.centerx = screen.get_rect().centerx + 20text_Rect.centery = screen.get_rect().centery - 250screen.blit(text, text_Rect)if not win:screen.blit(game_over, (0, 0))pygame.font.init()font = pygame.font.SysFont('SimHei',32)text = font.render("失败 !",True, (250, 50, 200))text_Rect = text.get_rect()text_Rect.centerx = screen.get_rect().centerx + 20text_Rect.centery = screen.get_rect().centery - 250screen.blit(text, text_Rect)pygame.display.flip()for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()

源代码链接

源代码 github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/142962.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何用python做游戏(简单易上手版)【送 源码】

嗨害大家好鸭&#xff0c;我是小熊猫&#x1f5a4; 很多小伙伴后台私信问我说&#xff0c; “python可以做游戏吗 &#xff1f;” “要怎么做呢&#xff1f;” 接下来我就介绍一下&#xff0c; 如何用Python做游戏 有什么python相关报错解答自己不会的、或者源码资料/模块…

用Python做一个超简单的小游戏(一听就懂)

前言 有的人可能学过一点Python基础&#xff0c;但不知道干什么好。今天就教大家做一个简单的小游戏 未经允许&#xff0c;禁止转载 文章目录 前言写它会用到源码先抛出来知识讲解random介绍语法方法参数表举例 while语法举例 拆分代码讲解产生随机数循环产生随机数增加循环条…

用Python制作小游戏

谁还没有玩过俄罗斯方块呢&#xff0c;这款单机小游戏&#xff0c;简单易懂&#xff0c;最好打发无聊时间了。 使用python除了可以爬取图片&#xff0c;视频&#xff0c;当然可以制作一些小游戏了。 其实这个很简单&#xff0c;就是转化数据很麻烦 ☹ 实际流程&#xff1a; …

用Python制作简单的小游戏

朋友们大家好&#xff0c;相信大部分人都喜欢玩游戏&#xff0c;无论是在工作间隙还是下班回家的路上&#xff0c;可能都会拿起手机玩游戏打发时间&#xff0c;亦或是在游戏中寻找乐趣&#xff0c;放松自己。上 我跟大家分享的内容主要是用Python的Pygame Zero模块来制作小游戏…

一日一技:用Python做游戏有多简单

自从表白代码发了以后&#xff0c;有很多同学问我除了这种表白的&#xff0c;还有其他什么小游戏吗&#xff0c;游戏是怎么做的&#xff0c;难不难。我就用两篇文章来介绍一下&#xff0c;如果使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小…

利用python制作自己的小游戏,超简教程

懒得客套&#xff0c;直接步入主题 首先&#xff0c;利用python来做游戏需要用到python中的pygame模块&#xff0c;这个我们在终端cmd中安装 输入&#xff1a;pip install pygame 安装好后我们进入pycharm查询我们有的模块&#xff08;打开路径&#xff1a;文件-设置&#xf…

用python制作几款简单又好玩的小游戏,找回童年的记忆

今天给大家带来几个Python小游戏&#xff0c;找回童年的同时学习编程&#xff01; 一、接金币 普通难度&#xff1a;❤ 玩法介绍&#xff1a;吃金币&#xff0c;控制左右键&#xff0c;有手就行。 源码分享 import os import cfg import sys import pygame import random…

30个Python小游戏,上班摸鱼我能玩一天【内附源码】

大家好&#xff0c;我是辣条。 今天给大家带来30个py小游戏&#xff0c;一定要收藏&#xff01; 目录 有手就行 1、吃金币 2、打乒乓 3、滑雪 4、并夕夕版飞机大战 5、打地鼠 简简单单 6、小恐龙 7、消消乐 8、俄罗斯方块 9、贪吃蛇 普普通通 10、24点小游戏 1…

python小游戏-移动木板

文章目录 一、游戏简介二、编写步骤1.引入库2.初始化3.相关自定义函数4.相关自定义函数 一、游戏简介 本游戏是通过python编写的小游戏&#xff0c;给初学者熟悉python编程语言抛砖引玉&#xff0c;希望有所帮助。 成型的效果图如下&#xff1a; 二、编写步骤 1.引入库 代码…

MySQL——子查询

来一篇 MySQL-子查询 记录一下这个美好的时光,学习记录篇,下文中所有SQL 语句 均可在 MySQL DB 学习Demo 此处下载SQL语句执行,有相关DB 与 表。 1. 需求分析与问题解决 1.1 实际问题 现有解决方式一: SELECT salary FROM employees WHERE last_name = Abel SELECT last…

谈谈linux网络编程中的应用层协议定制、Json序列化与反序列化那些事

linux【网络编程】之协议定制、序列化与反序列化 一、序列化与反序列化二、应用层协议如何定制三、网络通信中数据流动的本质四、网络版计算器编写4.1 业务流程4.2 核心代码 一、序列化与反序列化 由于socket api的接口&#xff0c;在读写数据的时候是以字符串的方式发送接收的…

python配置arcpy环境

在pycharm配置arcpy让其导入不出现没有arcpy这个模块我们会进行环境配置 。 第一步 第二步 第三步 第四部 然后找到你arcgis安装的位置 记住如果你重名了arcgis安装位置的名字一定要进入到arcpy安装目录中找一个文件 查看Arcgis安装目录下的 E:\ArcGIS\Python27\ArcGIS10.2\L…

Python配置CPLEX

大致的安装步骤如下 1.百度搜索CPLEX&#xff0c;进入官网&#xff0c;获取许可后&#xff0c;下载并安装&#xff08;要能找到自己的安装路径&#xff09; 2.安装完成后&#xff0c;可以直接用ide进行编程&#xff0c;但是&#xff0c;还可以用Python来调用CPLEX 3.给Pytho…

Python:环境变量配置方法 详细教程

最近有人问我如何配置python环境变量&#xff0c;这篇文章就向大家介绍python环境变量配置方法。 python环境变量的配置方法&#xff1a;首先鼠标右键此电脑&#xff0c;选择属性&#xff1b;然后点击高级系统设置&#xff0c;点击环境变量&#xff1b;接着点击path进行编辑&am…

vscode配置python路径_Vscode的python配置(macOS)

1. Vscode是一款开源的跨平台编辑器。默认情况下&#xff0c;vscode使用的语言为英文(en)&#xff0c;以下步骤改为中文 打开vscode工具&#xff0c;使用快捷键组合【CmdShiftp】&#xff0c;在搜索框中输入“configure display language”&#xff0c;点击确定后&#xff0c;…

python环境配置教程

一、下载和安装软件 进入python官网&#xff0c;下载所需的python版本 进入pycharm官网&#xff0c;下载社区版即可 两个软件安装&#xff0c;基本安装默认配置即可&#xff0c;选择环境变量时建议选一下&#xff08;或者后面自行添加&#xff09; 二、建立代码项目 本地建…

pycharm配置python环境

文章目录 安装pycharm安装pythonpycharm配置python,并激活pycharm界面运行一下取消更新 安装pycharm PyCharm 的下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwindows 版本分为community(社区版)和professional(专业版) 1.选择专业版安装 点击I…

MacOS配置Python环境

python简介 Python是用来编写应用程序的高级编程语言。 Python就为我们提供了非常完善的基础代码库&#xff0c;覆盖了网络、文件、GUI、数据库、文本等大量内容&#xff0c;被形象地称作“内置电池&#xff08;batteries included&#xff09;”。 用Python开发&#xff0c;许…

Sublime配置Python环境步骤

零、配置python3环境 打开 Tools > Build System > New Build System 输入以下内容 {//"shell_cmd": "make""cmd": ["D:/Python/python.exe","-u","$file"],"file_regex": "^[ ]*File \&…

python配置Anaconda3环境运行python

1.安装Anaconda3 链接&#xff1a;Anaconda | Anaconda Distribution 点击NXET 点击I Agree 选择第一个 自己更改存储位置 选择第二个 2.下载Pycharm 我目前使用的是2021.1专业版&#xff0c;下载去官网&#xff0c;安装也很简单&#xff0c;就不多说了。 配置 1、打开…