前言
既做了雏形,不稍微完善一点心里总有点小疙瘩。
效果图
补充说明
1、游戏通关通过rect判断而不是碰撞(两个终点)
2、增加人物行走的动作(布尔标志位)
3、箱子覆盖于终点之上有特殊颜色(image_alt)
4、选素材用心了些
源代码
import tkinter as tk
import pygame
import time
import numpy as np
import sys
from PIL import ImageTk,Image,ImageGrab
from tkinter import StringVar,IntVar,messagebox,Radiobutton
#屏幕大小的常量
SCREEN_RECT = pygame.Rect(0,0,640,640)
#刷新的帧率
FRAME_PER_SEC = 60
#墙体
class GameSprite(pygame.sprite.Sprite): #(继承父类) 其中sprite是模块 Sprite是类名称
'''精灵基类'''
#构造函数/初始化
image_name = 0
def __init__(self,image_name,x=0,y=0,z=1):
self.move_num = 0
self.leftorright = True
#调用父类初始化方法
super().__init__()
#定义对象的属性
self.image_name = image_name
self.image = pygame.image.load(self.image_name)
if z == 0:
self.rect = pygame.Rect(0,0,64,64)
else :
self.rect = self.image.get_rect() #图像的属性
self.rect.x = x*64
self.rect.y = y*64
class hero(GameSprite):
'''英雄类'''
def __init__(self,x,y):
super().__init__("./image/character1.png",x,y,0)
self.num = 0
def move(self,num):
self.num = num
def update(self,hero_group,wall_group,box_group):
#print(self.rect)
# 传入 1 2 3 4 分别对应上下左右 1-1
if self.num == 1:
if self.leftorright:
self.image_name = './image/Character7.png'
else :
self.image_name = './image/Character8.png'
self.rect.y -= 64
if len(pygame.sprite.groupcollide(hero_group, wall_group, False, False)) > 0:
self.rect.y += 64
if len(pygame.sprite.groupcollide(hero_group, box_group, False, False)) > 0:
self.rect.y -= 64
if len(pygame.sprite.groupcollide(hero_group, wall_group, False, False)) + len(
pygame.sprite.groupcollide(hero_group, box_group, False, False)) > 0:
self.rect.y += 64
self.rect.y += 64
elif self.num ==2 :
if self.leftorright:
self.image_name = './image/Character4.png'
else :
self.image_name = './image/Character5.png'
self.rect.y += 64
if len(pygame.sprite.groupcollide(hero_group, wall_group, False, False)) > 0: