IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> python pygame 游戏实战: 2048 game 游戏简化版 -> 正文阅读

[游戏开发]python pygame 游戏实战: 2048 game 游戏简化版

2048游戏的算法参考:2048 Game in Python - GeeksforGeeks

以下是2048游戏的简化版, 在python 3.9运行没有问题。 没有用精美的图像, 主要是原理的实现

import random
import pygame
import numpy as np

WINDOW_WIDTH, WINDOW_HEIGHT = 600, 601
CELL_SIZE = 60
#ref:https://www.geeksforgeeks.org/2048-game-in-python/

class mat2048():
? ? def __init__(self,screen):
? ? ? ? self.reset_mat()
? ? ? ? self.screen=screen
? ? ? ? self.bg_cell=None
? ? ? ? self.font = pygame.font.SysFont('comicsans', 40)?
? ? def reset_mat(self):
? ? ? ? self.mat=[[0 for c in range(4)] for r in range(4)]
? ? ? ? self.add2()
? ? def add2(self):
? ? ? ? r = random.randint(0, 3)
? ? ? ? c = random.randint(0, 3)?
? ? ? ? while ?(self.mat[r][c]!=0): ?
? ? ? ? ? ? r = random.randint(0, 3)
? ? ? ? ? ? c = random.randint(0, 3) ?
? ? ? ? self.mat[r][c]=2 ? ? ? ? ? ??
? ? def compress(self):
? ? ? ? new_mat=[[0 for c in range(4)] for r in range(4)]
? ? ? ? changed = False
? ? ? ? for i in range(4):
? ? ? ? ? ? pos = 0?
? ? ? ? ? ? for j in range(4):
? ? ? ? ? ? ? ? if(self.mat[i][j] != 0): ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? new_mat[i][pos] = self.mat[i][j] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? if(j != pos):
? ? ? ? ? ? ? ? ? ? ? ? changed = True
? ? ? ? ? ? ? ? ? ? pos += 1
? ? ? ? self.mat=new_mat ? ? ? ? ? ?
? ? ? ? return changed
? ? def merge(self): ? ??
? ? ? ? changed = False ? ??
? ? ? ? for i in range(4):
? ? ? ? ? ? for j in range(3):?
? ? ? ? ? ? ? ? if(self.mat[i][j] == self.mat[i][j + 1] and self.mat[i][j] != 0):?
? ? ? ? ? ? ? ? ? ? self.mat[i][j] = self.mat[i][j] * 2
? ? ? ? ? ? ? ? ? ? self.mat[i][j + 1] = 0?
? ? ? ? ? ? ? ? ? ? changed = True?
? ? ? ? return changed
?
? ? def move(self,key):
? ? ? ? action = { pygame.K_DOWN: self.move_down,
? ? ? ? ? ? ? ? ? ?pygame.K_LEFT: self.move_left,
? ? ? ? ? ? ? ? ? ?pygame.K_RIGHT: self.move_right,
? ? ? ? ? ? ? ? ? ?pygame.K_UP: self.move_up }
? ? ? ? changed=action[key]()
? ? ? ? if changed: self.add2()
? ? ? ? ? ? ? ??
? ? def move_left(self):?
? ? ? ? changed1= self.compress()?
? ? ? ? changed2 =self. merge() ? ?
? ? ? ? changed = changed1 or changed2
? ? ? ? temp = self.compress()
? ? ? ? return changed
? ? def move_right(self):
? ? ? ? self.reverse()
? ? ? ? changed=self.move_left()
? ? ? ? self.reverse() ? ?
? ? ? ? return changed
? ? def move_up(self):
? ? ? ? self.transpose()?
? ? ? ? changed=self.move_left()
? ? ? ? self.transpose() ?
? ? ? ? return changed
? ? def move_down(self):
? ? ? ? self.transpose()
? ? ? ? changed=self.move_right()
? ? ? ? self.transpose()
? ? ? ? return changed?
? ? def reverse(self):
? ? ? ? new_mat=[]
? ? ? ? for i in self.mat:
? ? ? ? ? ? new_mat.append(i[::-1])
? ? ? ? self.mat=new_mat ? ?
? ? def transpose(self):
? ? ? ? new_mat = []
? ? ? ? for i in range(4):
? ? ? ? ? ? new_mat.append([])
? ? ? ? ? ? for j in range(4):
? ? ? ? ? ? ? ? new_mat[i].append(self.mat[j][i])
? ? ? ? self.mat= new_mat ? ??
? ? def draw_cell(self,x,y):
? ? ? ? self.bg_cell=pygame.Surface((CELL_SIZE,CELL_SIZE)) ?
? ? ? ? self.bg_cell.fill((255,255,255))
? ? ? ? rect=self.bg_cell.get_rect(topleft=(x,y)) ??
? ? ? ? pygame.draw.rect(self.bg_cell,'blue',(0, 0, CELL_SIZE, CELL_SIZE),1)
? ? ? ? self.screen.blit(self.bg_cell, rect)?
? ? def draw_text(self,text, x, y, color):
? ? ? ? text_surface = self.font.render(text, True, color)
? ? ? ? text_rect = text_surface.get_rect()
? ? ? ? text_rect.topleft = (x+10, y+10)
? ? ? ? self.screen.blit(text_surface, text_rect)?
? ? def mat_update(self):
? ? ? ? x0,y0=100,100
? ? ? ? for i in range(4):
? ? ? ? ? ? for j in range(4):
? ? ? ? ? ? ? ? x=x0+i*CELL_SIZE
? ? ? ? ? ? ? ? y=y0+j*CELL_SIZE
? ? ? ? ? ? ? ? self.draw_cell(x,y)
? ? ? ? ? ? ? ? d=self.mat[j][i]
? ? ? ? ? ? ? ? c=(d*50%255,255-d*10%150,(d+100)%100)
? ? ? ? ? ? ? ? if d==0:
? ? ? ? ? ? ? ? ? ? txt=''
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? txt=str(d)
? ? ? ? ? ? ? ? self.draw_text(txt,x,y,c)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
def checkEvents(mat):
? ? ? ? for event in pygame.event.get():
? ? ? ? ? ? if event.type == pygame.QUIT:
? ? ? ? ? ? ? ? exit()
? ? ? ? ? ? if event.type==pygame.KEYDOWN: ??
? ? ? ? ? ? ? ? if event.key in [pygame.K_LEFT, pygame.K_UP,pygame.K_RIGHT, pygame.K_DOWN]:
? ? ? ? ? ? ? ? ? ? mat.move(event.key)
? ? ? ? ? ? ? ? ? ??
pygame.init()
screen=pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
A=mat2048(screen)
run=True
while run:
? ? checkEvents(A)
? ? A.mat_update()
? ? pygame.display.update()

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 13:04:30  更:2021-11-17 13:05:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 23:31:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码