用Python制作小游戏

谁还没有玩过俄罗斯方块呢,这款单机小游戏,简单易懂,最好打发无聊时间了。

使用python除了可以爬取图片,视频,当然可以制作一些小游戏了。

其实这个很简单,就是转化数据很麻烦 ☹

实际流程:

  • 新生成图形块,如果从下往上已经堆到这里了(图形块出现位置出现不为空白的背景)游戏结束
  • 下落(途中可以键盘操作块的移动,转动)
  • 到底,图形数据记录到map,检查是否消去一行

所有的检查,就用check_action(位置x,位置y,图形块号,图形转动角度):检查是否出界或遇到原先的块,

  • 游戏是否结束判断:新生成图形块位置是否check_action == False
  • 下落是否到底:y+1位置是否check_action == False
  • 操作动作(x-1,x+1,y+1,角度+1):是否check_action == False
import sys
import pygame
from pygame.locals import *
import randomclass Block:blk_color = [(255, 255, 255),(255, 255, 0),(255, 0, 255),(0, 255, 255),(255, 0, 0),(0, 255, 0),(0, 0, 255),(32,32,32)]BLANK = 7type_coord=[[[-1,0],[0,0],[1,0],[2,0]]\,[[-1,0],[0,0],[1,0],[0,1]]\,[[-1,0],[0,0],[-1,1],[0,1]]\,[[-1,0],[0,0],[0,1],[1,1]]\,[[0,0],[1,0],[-1,1],[0,1]]\,[[-1,0],[0,0],[1,0],[1,1]]\,[[-1,0],[0,0],[1,0],[-1,1]]]type_rotate = []def __init__(self,x,y,blk,angle):self.x = xself.y = yself.blk = blkself.angle = angle@staticmethoddef rotate(no):rt_all = []rt = Block.type_coord[no][:]cx,cy=0,0for b in range(4):rt[b][0],rt[b][1] = rt[b][0]*4,rt[b][1]*4cx += rt[b][0]cy += rt[b][1]cx = (cx)//8*2 if no !=6 else (cx+4)//8*2cy = (cy)//8*2 if no !=6 else (cy-4)//8*2rt_all.append(rt)for r in range(3):rt_new = []for b in range(4):rt_new.append([cx + (cy-rt[b][1]),cy-(cx-rt[b][0])])rt_all.append(rt_new)rt = rt_newfor r in range(4):for b in range(4):rt_all[r][b][0] //= 4rt_all[r][b][1] //= 4return rt_all@staticmethoddef init_rotate():for r in range(7):Block.type_rotate.append(Block.rotate(r))class TRS:screen = Nonemap = [[Block.BLANK]*10 for i in range(20)]STATUS = 0cbk = Nonedef __init__(self,screen):TRS.screen = screen@staticmethoddef action(key_pressed):if(key_pressed[K_LEFT] and TRS.check_action(TRS.cbk.x-1,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.x -= 1elif (key_pressed[K_RIGHT] and TRS.check_action(TRS.cbk.x+1,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.x += 1elif (key_pressed[K_UP] and TRS.check_action(TRS.cbk.x,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle+1)):TRS.cbk.angle += 1elif (key_pressed[K_DOWN] and TRS.check_action(TRS.cbk.x,TRS.cbk.y+1,TRS.cbk.blk,TRS.cbk.angle)):TRS.cbk.y += 1@staticmethoddef new_blk():TRS.cbk = Block(5,0,random.randint(0,6),0)@staticmethoddef check_action(x,y,blk,angle):tr = Block.type_rotate[blk][angle%4]for b in range(4):bx,by = x + tr[b][0],y + tr[b][1]if(bx<0 or bx>9 or by <0 or by>19 or TRS.map[by][bx]!=Block.BLANK):return Falsereturn True@staticmethoddef check_drop():if TRS.check_action(TRS.cbk.x,TRS.cbk.y+1,TRS.cbk.blk,TRS.cbk.angle):TRS.cbk.y += 1else:TRS.STATUS = 2@staticmethoddef check_clear():blk = Block.type_rotate[TRS.cbk.blk][TRS.cbk.angle%4]row = list({TRS.cbk.y + blk[i][1] for i in range(4)})row.sort()row.reverse()for b in range(4):TRS.map[TRS.cbk.y + blk[b][1]][TRS.cbk.x + blk[b][0]] = TRS.cbk.blkdel_rows = 0for r in row:if not (Block.BLANK in TRS.map[r]):TRS.map.pop(r)del_rows += 1for d in range(del_rows):TRS.map.insert(0,[Block.BLANK for i in range(10)])@staticmethoddef print_game():TRS.screen.fill((0, 0, 0))for row in range(20):for col in range(10):pygame.draw.rect(TRS.screen, Block.blk_color[TRS.map[row][col]], ((col*21,row*21), (20, 20)), 0)blk = Block.type_rotate[TRS.cbk.blk][TRS.cbk.angle%4]for b in range(4):pygame.draw.rect(TRS.screen, Block.blk_color[TRS.cbk.blk], (((TRS.cbk.x+blk[b][0])*21,(TRS.cbk.y+blk[b][1])*21), (20, 20)), 0)
class App:def __init__(self):pygame.init()screen = pygame.display.set_mode((300,430))Block.init_rotate()TRS(screen)def main(self):clock = pygame.time.Clock()   # 创建游戏时钟count = 1# 进入游戏循环while True:# 设置刷新帧率clock.tick(15)# 事件检测for event in pygame.event.get():if event.type == pygame.QUIT:   # 退出事件sys.exit()if TRS.STATUS == 0:TRS.new_blk()if TRS.check_action(TRS.cbk.x,TRS.cbk.y,TRS.cbk.blk,TRS.cbk.angle):TRS.STATUS = 1else:TRS.STATUS = 3print("GAME OVER")elif TRS.STATUS == 1:TRS.action(pygame.key.get_pressed())if count % 10 == 0:TRS.check_drop()elif TRS.STATUS == 2:TRS.check_clear()TRS.STATUS = 0TRS.print_game()pygame.display.update()   #刷新屏幕count += 1App().main()

ok,分享到这里也就结束啦。感兴趣的朋友可以去试试,又不会的可以来找我!
在这里插入图片描述

希望你们能够喜欢,记得三连哦。我是小圆,我们下篇文章见啦 ~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于QT的推箱子小游戏设计

基于QT的推箱子小游戏设计 目 录 1功能设计 1 1.1简介 1 1.2主要功能 1 2总体设计 2 2.1游戏流程 2 2.2设计思路 3 3具体实现 3 3.1 界面的设计 3 3.2 推箱子功能的实现 4 3.4按键函数调用 4 3.5绘图事件调用 4 4调试结果 6 4.1游戏主界面 6 4.2游戏帮助界面 7 4.3游戏选关界面…

控制台推箱子小游戏的实现

首先&#xff0c;这个推箱子&#xff0c;是在黑窗口实现的&#xff0c;界面不美观&#xff0c;有能力的写好了可以尝试图形化窗口easyx封装好 先来看看完整代码 #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <Windows.h> #…

基于C#制作一个飞机大战小游戏

此文主要基于C#制作一个飞机大战游戏,重温经典的同时亦可学习。 实现流程1、创建项目2、界面绘制3、我方飞机4、敌方飞机5、子弹及碰撞检测实现流程 1、创建项目 打开Visual Studio,右侧选择创建新项目。搜索框输入winform,选择windows窗体应用,填写对应的保存路径点击下一…

CCL2023-Eval | 汉语高考机器阅读理解对抗鲁棒评测正式开启,诚邀您积极参与

简介 机器阅读理解领域近年来取得了显著的发展成果&#xff0c;然而&#xff0c;在面向开放、动态、真实环境下的推理与决策时&#xff0c;模型鲁棒性仍有待提高。为此&#xff0c;山西大学自然语言处理团队基于“CCL2022-高考语文阅读理解可解释评测”数据集 GCRC 构建了对抗鲁…

Java对接钉钉机器人推送消息

自定义钉钉机器人推送使用 钉钉官方文档 使用场景 可用于替换短信发送节约成本&#xff0c;也可以将报警等消息推送到指定的钉钉群中 调用频率限制 由于消息发送太频繁会严重影响群成员的使用体验&#xff0c;因此钉钉开放平台对自定义机器人发送消息的频率作出以下限制&…

DingTalk「开发者说」 钉钉连接平台:打通企业数据孤岛的开发实践

钉钉连接平台简介 钉钉连接平台是什么&#xff1f; 简单来说&#xff0c;钉钉连接平台是打破企业系统数据孤岛的开发平台。钉钉连接平台通过统一的标准协议&#xff0c;接入各类应用和系统&#xff0c;并提供强安全、高可用、轻量化的连接能力&#xff0c;同时输出覆盖各类业…

JAVA对接钉钉

正文 公司要求对接钉钉&#xff0c;之前没对接过&#xff0c;相当于从0开始&#xff0c;记录一下对接的过程 1、访问钉钉官网 申请成为开发者 因为公司没对接过&#xff0c;所以我自己注册了一个公司&#xff08;公司名随便填&#xff0c;其他的按要求填就好&#xff09; …

java对接钉钉 发送/更新 互动卡片消息

java对接钉钉 发送/更新 互动卡片消息 一、准备工作二、发送互动卡片消息三、更新互动消息卡片 先看下效果图 点击相应的积分按钮&#xff0c;就会给对应的申请人发送对应的积分&#xff08;对接到我们自己的系统发送&#xff09;&#xff0c;审核完之后&#xff0c;按钮变成已…

PHP-钉钉扫码登录对接第三方网站

这个小功能对于企业内部的一些自用后台网站还是很常用的&#xff0c;对接也相对简单&#xff0c;记录下对接流程。 开发文档&#xff1a;扫码登录第三方网站 - 钉钉开放平台 1.先登录钉钉开发者后台&#xff0c;创建扫码登录应用授权 开发者后台统一登录 - 钉钉统一身份认证 …

TED1984-2019全部中英对照演讲稿集 学习英文演讲写作的好帮手

TED1984-2019全部中英对照演讲稿集 学习英文演讲写作的好帮手 一、TED简介&#xff1a; TED&#xff08;指Technology, Entertainment, Design在英语中的缩写&#xff0c;即技术、娱乐、设计&#xff09;是美国的一家私有非营利机构&#xff0c;该机构以它组织的TED大会著称&…

那些会讲ppt的技术人有多爽?演讲的6个步骤

一场好的技术分享&#xff0c;可以用“有趣有料”四个字来形容&#xff0c;那么如何才能做到有趣又有料呢&#xff1f;结合我的经历&#xff0c;做了一些总结。 2015年&#xff0c;我出版《技术管理之巅》以后&#xff0c;先后收到QCon、CSDN、IT168等业界知名技术大会的邀请担…

关于计算机的英语演讲ppt模板,英语演讲ppt模板

目录 一、英语演讲ppt素材 ①.要简单点的 内容不限 但最好是寓言或者能给人点启示的东西 有意思就行 背景。 ②.要简单点的 内容不限 但最好是寓言或者能给人点启示的东西 有意思就行 背景。 ③.时间3-5分钟&#xff0c;主题无所谓&#xff0c;liuxiaoxuan89tom.com ④.Mans li…

自定义Msgbox密码登录

背景&#xff1a;虽然Excel是自带密码功能的&#xff0c;但是设置了密码以后&#xff0c;打开excel&#xff0c;是看不到excel的内容的。 如果想让使用者打开excel&#xff0c;能大概看到excel的内容 &#xff0c;但是会有弹窗&#xff0c;导致没法选择和更改数据&#xff0c;就…

Linux 系统密码策略设置

目录 Linux主要密码安全需求 1. 禁止使用旧密码 2.设置密码最短长度 3.设置密码复杂度 4.设置密码过期期限 Linux密码策略理论知识&#xff1a; 1、使用配置文件/etc/pam.conf 2、使用配置目录/etc/pam.d/ 讲怎么使用&#xff0c;后面有理论教程&#xff0c;先知其然再…

远程计算机guest密码更改了,怎么给guest设置密码

我们一般是在控制面板 - 用户帐户下启用来宾帐户&#xff0c;但我们可以在guest(供来宾访问计算机或访问域的内置帐户)下新建用户名和设置密码&#xff0c;方法简单&#xff0c;操作容易。下面是学习啦小编给大家整理的一些有关给guest设置密码的方法&#xff0c;希望对大家有帮…

计算机知识科普讲解大赛,谁是科普达人?2020年成都市科普讲解大赛拉开帷幕...

生活中无处不在的电磁波是怎样产生的呢&#xff1f; 被称为“汉代计算机”的一钩多综式提花织机与成都有什么关系&#xff1f; …… 近日&#xff0c;成都博物馆&#xff0c;40余家单位的70余名选手&#xff0c;通过4分钟参赛视频&#xff0c;亮相2020年成都市科普讲解大赛预赛…

chatgpt赋能python:Python预测分析:什么是预测分析?

Python预测分析&#xff1a;什么是预测分析&#xff1f; 随着数字化时代的到来&#xff0c;数据越来越多&#xff0c;数据分析的需求也随之增加。预测分析就是一种基于数据分析的技术&#xff0c;可以通过数据分析并应用统计模型&#xff0c;来预测未来发生的事件或趋势&#…

度盘搜失效?这款网盘搜索神器万万别错过!

奶糖猫来啦&#xff01;资源搜索一直以来都是需求非常大的一方面&#xff0c;总会有伙伴问我有没有这方面比较好用的软件。 之前很火的度盘搜失效了&#xff0c;后面也出现了一系列的资源搜索工具&#xff0c;但总存在一个致命的问题&#xff0c;资源普遍太老了&#xff0c;不能…

好用的网盘搜索引擎

最近&#xff0c;我们见到了许多安利网盘搜索引擎的推文&#xff0c;安利了很多网址和论坛。但经过答主亲测&#xff0c;许多被提到的网站&#xff0c;不是打不开链接&#xff0c;就是进去发现是广告&#xff0c;早已经被封停了&#xff0c;所以我们亲自测试了一些这方面的内容…

百度云盘搜索助手 V1.2(可查询提取码,带5个搜索引擎)

介绍&#xff1a; 云盘搜索助手功能强大&#xff0c;操作简单&#xff0c;使用后可以帮助用户更轻松快捷的搜索云盘资源。软件内置5个搜索引擎供您查资源&#xff0c;另外内置查询提取码功能。 网盘下载地址&#xff1a; http://www.bytepan.com/bNjeq9AKuVC 图片&#xff1a…