一个好玩的迷宫小游戏

迷宫小游戏

前言


迷宫游戏是非常经典的游戏,在该项目要求随机生成一个迷宫,并求解迷宫


一、python是什么?

Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

二、使用步骤

1.引入库

代码如下:

import pygame

import sys

import random

import time

from pygame.localsimport *

from randomimport randint, choice

import maze

import color

2.读入数据

代码如下:

# 设置屏幕宽度和高度为全局变量

global screen_width

screen_width =800

global screen_height

screen_height =600

# 输出文本信息

def print_text(font, x, y, text, color, shadow=True):

if shadow:

imgText = font.render(text, True, (0, 0, 0))

screen.blit(imgText, (x-2,y-2))

imgText = font.render(text, True, color)

screen.blit(imgText, (x,y))

2.1.游戏开始

if __name__ =='__main__':

pygame.init()

screen = pygame.display.set_mode([screen_width, screen_height])

pygame.display.set_caption('Maze_AI——by Wonz')# 游戏标题

    global font1, font2, font3, font4# 文字

    clock = pygame.time.Clock()

fps =20

    screen.fill(color.White)

r_list = maze.room.creat_map(maze.room_m, maze.room_n)

begin_point = [0, 0]

begin_room = r_list[0][0]

maze.room.creat_migong(r_list, begin_room)

# 画出去起点和终点的其他点

    for iin range(maze.room_m):

for jin range(maze.room_n):

begin_point[0] =25 + i * maze.room_size

begin_point[1] =25 + j * maze.room_size

r_color = color.Black

maze.room.draw_room(screen, begin_point, r_list[i][j].walls, maze.room_size, r_color)

# 画起点

    maze.room.draw_room(screen, [25, 25], [0, 0, 0, 1], maze.room_size, color.White)

# 画终点

    maze.room.draw_room(screen, [25 + (maze.room_m -1) * maze.room_size, 25 + (maze.room_n -1) * maze.room_size],

                        [0, 1, 0, 0], maze.room_size, color.White)

# 加载角色照片

    user = pygame.image.load("user.png").convert_alpha()

width,height = user.get_size()

user = pygame.transform.smoothscale(user, (8,8))

# 画角色

    width, height = user.get_size()

x =27

    y =30

    roomx =0

    roomy =0

    screen.blit(user, (x, y))

2.2.控制角色移动

while True:

for eventin pygame.event.get():

if event.type == pygame.QUIT:

sys.exit()

# 走到终点

        elif(roomx == maze.room_m-1 and roomy == maze.room_n-1):

font4 = pygame.font.Font(None, 32)

print_text(font4, 350, 350, "Win" , color.Red)

break

        # 键盘响应,只取按“→”键作为例子,“↑”、“↓”、“←”类似,只要改改参数即可

        elif event.type == pygame.KEYDOWN:

if event.key == pygame.K_RIGHT:

# 右边无墙

                if(r_list[roomx][roomy].walls[1] ==False):

x += maze.room_size

roomx +=1 # 计房间数

                    maze.steps +=1 # 计步

                    font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))# x:25 y:0 width:200 height:25

                    screen.fill(color.White, (300, 0, 200, 25))# x:300 y:0 width:200 height:25

                    print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

pygame.display.flip()

screen.fill(color.White, (x-15,y,10,10))

screen.blit(user, (x, y))

# 右边有墙

                elif (r_list[roomx][roomy].walls[1] ==True):

maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

font2 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))# x:25 y:0 width:200 height:25

                    print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

print_text(font2, 350, 0, "This is a wall!", color.Black)

pygame.display.flip()

screen.blit(user, (x, y))

elif event.key == pygame.K_LEFT:

# 左边无墙

                if (r_list[roomx][roomy].walls[3] ==False):

x -= maze.room_size

roomx -=1

                    maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))# x:300 y:0 width:200 height:25

                    print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

pygame.display.flip()

screen.fill(color.White, (x+15,y,10,10))

screen.blit(user, (x, y))

# 左边有墙

                elif (r_list[roomx][roomy].walls[3] ==True):

maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

font2 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

print_text(font2, 350, 0, "This is a wall!", color.Black)

pygame.display.flip()

screen.blit(user, (x, y))

elif event.key == pygame.K_UP:

# 上边无墙

                if (r_list[roomx][roomy].walls[0] ==False):

y -= maze.room_size

roomy -=1

                    maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))# x:300 y:0 width:200 height:25

                    print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

pygame.display.flip()

screen.fill(color.White, (x,y+15,10,10))

screen.blit(user, (x, y))

# 上边有墙

                elif (r_list[roomx][roomy].walls[0] ==True):

maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

font2 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

print_text(font2, 350, 0, "This is a wall!", color.Black)

pygame.display.flip()

screen.blit(user, (x, y))

elif event.key == pygame.K_DOWN:

# 下边无墙

                if (r_list[roomx][roomy].walls[2] ==False):

y += maze.room_size

roomy +=1

                    maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))# x:300 y:0 width:200 height:25

                    print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

pygame.display.flip()

screen.fill(color.White, (x,y-15,10,10))

screen.blit(user, (x, y))

# 下边无墙

                elif (r_list[roomx][roomy].walls[2] ==True):

maze.steps +=1

                    font1 = pygame.font.Font(None, 32)

font2 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(maze.steps), color.Black)

print_text(font2, 350, 0, "This is a wall!", color.Black)

pygame.display.flip()

screen.blit(user, (x, y))

2.3.鼠标响应

elif event.type == pygame.MOUSEBUTTONUP:

font3 = pygame.font.Font(None, 32)

print_text(font3, 750, 0, "AI", color.Red)

pygame.display.flip()

start_x =0

    start_y =0

    steps =0

    for iin range(1000000000):

if (start_x == maze.room_m-1 and start_y == maze.room_n-1):

font4 = pygame.font.Font(None, 32)

print_text(font4, 350, 350, "Win", color.Red)

break

        d = random.randint(1,4)

# 上边无墙

        if (d ==1 and 0 <= start_x <= maze.room_m -1 and 0 <= start_y <= maze.room_n -1 and

                r_list[start_x][start_y].walls[0] ==False):# 在迷宫地图范围内且上边无墙

            start_y -=1

            steps +=1

            font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))# x:25 y:0 width:200 height:25

            screen.fill(color.White, (300, 0, 200, 25))# x:300 y:0 width:200 height:25

            print_text(font1, 25, 0, "Steps:" +str(steps), color.Black)# 步数统计

            pygame.display.flip()

screen.blit(user, ((start_x+2) * maze.room_size, (start_y+2) * maze.room_size))

# 右边无墙

        if (d ==2 and 0 <= start_x <= maze.room_m -1 and 0 <= start_y <= maze.room_n -1 and

                r_list[start_x][start_y].walls[1] ==False):

start_x +=1

            steps +=1

            font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(steps), color.Black)

pygame.display.flip()

screen.blit(user, ((start_x+2) * maze.room_size, (start_y+2) * maze.room_size))

# 下边无墙

        if (d ==3 and 0 <= start_x <= maze.room_m -1 and 0 <= start_y <= maze.room_n -1 and

                r_list[start_x][start_y].walls[2] ==False):

start_y +=1

            steps +=1

            font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(steps), color.Black)

pygame.display.flip()

screen.blit(user, ((start_x+2) * maze.room_size, (start_y+2) * maze.room_size))

# 左边无墙

        if (d ==4 and 0 <= start_x <= maze.room_m -1 and 0 <= start_y <= maze.room_n -1 and

                r_list[start_x][start_y].walls[3] ==False):

start_x -=1

            steps +=1

            font1 = pygame.font.Font(None, 32)

screen.fill(color.White, (25, 0, 200, 25))

screen.fill(color.White, (300, 0, 200, 25))

print_text(font1, 25, 0, "Steps:" +str(steps), color.Black)

pygame.display.flip()

screen.blit(user, ((start_x+2) * maze.room_size, (start_y+2) * maze.room_size))


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容