用户:
LLeo_淡退查看:0 回复:1 评论:0 创建时间:2023-08-20T17:58:54
【作品展示】

【作品介绍】
这是一款走格子的小游戏,基本规则是走完所有格,每个格子只能走一下,并不碰到障碍物。一共有9关,每一关的规则都有升级,欢迎来玩呦!!!(本人年纪小,请多指教大佬们)▷△◁
【作品源代码】
import turtle
import copy
import time
import random
import pygame
pygame.mixer.init()
track = pygame.mixer.music.load('菊次郎的夏天.mp3')
import os
import sys
# Python解释器工作目录
base_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
os.chdir(base_dir)
# -----------------------------------------------------------------
# 1.基本信息区,放置游戏相关的一些信息
size = 70
n=0
dhj_x = 1
dhj_y = 8
'''
0-空 1-墙 2-红包关闭 3-元宝 4-窟窿 5-年兽
6-传送门 7-金块 8-大黄鸡 9-陷阱
'''
level_n = 1
level1 = [[1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 2, 2, 2, 2, 5, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 5, 2, 2, 1],
[1, 2, 2, 5, 2, 2, 2, 2, 1],
[1, 3, 2, 2, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1]]
level2 = [[1,1,1,1,1,1,1,1,1,1,1,1],
[1,2,2,2,2,3,2,2,2,2,2,1],
[1,2,1,1,2,2,2,5,1,1,2,1],
[1,2,1,1,1,2,2,1,1,1,2,1],
[1,2,5,1,1,2,2,1,1,2,2,1],
[1,2,2,2,2,2,2,2,2,2,2,1],
[1,2,2,2,2,2,2,2,2,2,2,1],
[1,2,5,1,1,2,2,1,1,2,2,1],
[1,2,1,1,1,2,2,1,1,1,2,1],
[1,2,1,1,2,2,2,2,1,1,2,1],
[1,2,2,2,2,2,2,2,2,2,2,1],
[1,1,1,1,1,1,1,1,1,1,1,1]]
level3 = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1],
[1, 2, 2, 5, 2, 2, 1, 2, 6, 2, 1],
[1, 3, 2, 2, 6, 5, 1, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1],
[0, 0, 0, 0, 0, 0, 1, 2, 2, 5, 1],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]]
level4 = [[1, 1, 1, 1, 1, 1, 1],
[1, 2, 2, 2, 5, 2, 1],
[1, 2, 5, 2, 2, 7, 1],
[1, 2, 2, 7, 2, 2, 1],
[1, 2, 2, 2, 5, 2, 1],
[1, 3, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 1]]
level5 = [[1, 1, 1, 1, 1, 1, 1, 1],
[1, 7, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 3, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 10, 1],
[1, 2, 2, 11, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1]]
level6 = [[1,1,1,1,1,1,1,1,1,1],
[1,2,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1,7,7,7,7,7,7,7,7,1],
[1, 7, 7, 7, 7, 7, 7, 7, 7, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
level7= [[1, 1, 1, 1, 1, 1, 1, 1],
[1, 2, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 5, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 5, 2, 1],
[1, 2, 2, 5, 2, 2, 2, 1],
[1, 3, 2, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 1, 1]]
level8 = [[1,1,1,1,1,1,1,0,0,0,0],
[1,2,5,3,2,2,1,0,0,0,0],
[1,2,7,6,5,2,1,1,1,1,1],
[1,5,2,2,2,2,1,5,2,5,1],
[1,1,1,1,1,1,1,6,7,2,1],
[1,2,6,2,5,1,1,2,2,2,1],
[1,2,5,2,2,1,1,5,2,2,1],
[1,7,2,5,2,1,1,2,2,2,1],
[1,2,2,2,2,1,1,2,2,2,1],
[1,1,1,1,1,1,1,1,1,1,1]]
level9 = [[1,1,1,1,1,1],
[1,3,12,2,5,1],
[1,1,1,1,1,1]]
levels = [level1, level2, level3, level4, level5, level6,level7,level8,level9]
grid = copy.deepcopy(levels[level_n-1])
width = len(grid[0])
height = len(grid)
origin_x = -(width-1) / 2 * size
origin_y = (height-1) / 2 * size
players = [[1,5],[5,1],[1,3],[1,5],[4,2],[1,1],[1,6],[3,1],[1,1]]
player_x = players[level_n-1][0]
player_y = players[level_n-1][1]
result = 2
grid_time = [20,35,25,20,25,20,35,25,10]
count_time = grid_time[level_n-1]
# ------------------------------------------------------------
# 2.功能模块区,主要放置函数
def draw(pen,image,x,y):
global origin_x,size,origin_y
pen.goto(origin_x + x * size, origin_y - y * size)
pen.shape(image)
pen.stamp()
def move_up():
global player_y,player_x,grid
if result != 2:
return
player_y-=1
if player_y<0:
player_y+=1
return
elif grid[player_y][player_x]==1:
player_y+=1
return
elif grid[player_y][player_x] == 5:
player_y += 1
return
change_grid()
blank1()
l5()
blank2()
def move_down():
global player_y, player_x, grid
if result != 2:
return
player_y += 1
if player_y > height:
player_y -= 1
return
elif grid[player_y][player_x] == 1:
player_y -= 1
return
elif grid[player_y][player_x] == 5:
player_y -= 1
return
change_grid()
blank1()
l5()
blank2()
def move_left():
global player_y, player_x, grid
if result != 2:
return
player_x -= 1
if player_x < 0:
player_x += 1
return
elif grid[player_y][player_x] == 1:
player_x += 1
return
elif grid[player_y][player_x] == 5:
player_x += 1
return
change_grid()
blank1()
l5()
blank2()
def move_right():
global player_y, player_x, grid
if result != 2:
return
player_x += 1
if player_x > width:
player_x -= 1
return
elif grid[player_y][player_x] == 1:
player_x -= 1
return
elif grid[player_y][player_x] == 5:
player_x -= 1
return
change_grid()
blank1()
l5()
blank2()
def change_grid():
global player_y, player_x, grid,result,level_n
if grid[player_y][player_x] == 7:
grid[player_y][player_x] = 2
elif grid[player_y][player_x] == 2:
grid[player_y][player_x] = 3
elif grid[player_y][player_x] == 3:
grid[player_y][player_x] = 4
show_result()
def show_result():
global grid,result,player_x,player_y,level_n
if level_n == 9:
if grid[player_y][player_x] == 12:
grid[player_y][player_x] = 0
grid[1][4] = 13
elif grid[player_y][player_x] == 13:
result = 3
elif grid[player_y][player_x] == 8:
result = 1
elif grid[player_y][player_x] == 4:
result = 0
else:
for i in grid:
if 2 in i:
result = 2
break
else:
result = 1
def next_level():
global result,level_n,grid,width,height,origin_x,origin_y,size,player_x,player_y,count_time,grid_time
if result == 1:
if level_n == len(levels):
return
level_n+=1
grid = copy.deepcopy(levels[level_n-1])
width = len(grid[0])
height = len(grid)
origin_x = -(width-1) / 2 * size
origin_y = (height-1) / 2 * size
player_x = players[level_n-1][0]
player_y = players[level_n-1][1]
result = 2
count_time = grid_time[level_n-1]
def blank1():
global grid,player_x,player_y
if player_x == 8 and player_y == 2:
if level_n == 3:
player_x = 4
player_y = 3
elif player_x == 4 and player_y == 3:
if level_n == 3:
player_x = 8
player_y = 2
def blank2():
global grid,player_x,player_y
if player_x == 3 and player_y == 2:
if level_n == 8:
player_x = 2
player_y = 5
elif player_x == 2 and player_y == 5:
if level_n == 8:
player_x = 7
player_y = 4
elif player_x == 7 and player_y == 4:
if level_n == 8:
player_x = 3
player_y = 2
def l6():
global grid,level_n,result,count_time,n,dhj_x,dhj_y
if level_n == 6 and result == 2:
if count_time%1.5 == 0 and n == 0:
grid[dhj_y][dhj_x] = 8
n = 1
elif count_time%1 == 0 and n == 1:
grid[dhj_y][dhj_x] = 7
n = 0
dhj_x = random.randint(1, 8)
dhj_y = random.randint(1, 8)
def l5():
global grid,player_x,player_y,result
if level_n == 5:
if player_x == 1 and player_y == 1 or player_x == 6 and player_y == 3 or player_x == 3 and player_y == 4:
grid[player_y][player_x] = 9
result = 0
# ------------------------------------------------------------
# 3.操作事件区,放置键鼠操作相关的内容
turtle.onkey(move_up,'Up')
turtle.onkey(move_down,'Down')
turtle.onkey(move_left,'Left')
turtle.onkey(move_right, 'Right')
turtle.onkey(next_level, 'Return')
turtle.listen()
# ------------------------------------------------------------
# 4.场景素材区,添加游戏画面相关的素材
tile_shapes = ['空.gif', '墙.gif', '红包-闭合.gif', '元宝.gif', '窟窿.gif','年兽.gif',
'传送门.gif','金块.gif','大黄鸡.gif','陷阱.gif','金币.gif','红包-打开.gif','鞭炮.gif','星星.gif']
for i in tile_shapes:
turtle.addshape(i)
player_shapes = ['编程猫-掉落.gif','编程猫.gif','编程猫.gif','编程猫.gif']
for i in player_shapes:
turtle.addshape(i)
result_shapes = ['失败.gif', '成功.gif', '空.gif','通关.gif']
turtle.addshape('遮罩.gif')
for i in result_shapes:
turtle.addshape(i)
# ------------------------------------------------------------
# 5.画面绘制区,绘制场景用的画笔,绘制场景的代码
p = turtle.Pen()
p.penup()
p.hideturtle()
turtle.tracer(False)
time1 = time.time()
while True:
if pygame.mixer.music.get_busy() == False:
pygame.mixer.music.play()
p.clear()
for i in range(width):
for j in range(height):
draw(p,tile_shapes[grid[j][i]],i,j)
draw(p,player_shapes[result],player_x,player_y)
if level_n == 8 or level_n == 7:
draw(p,'遮罩.gif',player_x,player_y)
draw(p,result_shapes[result],(width-1)/2,(height-1)/2)
time2 = time.time()
if int(time2 - time1) == 1 and result == 2:
count_time -= 1
if count_time%1.5 == 0:
l6()
time1 = time.time()
if count_time == 0:
result = 0
p.goto(-280,250)
p.write(str(count_time),font = ('文泉驿正黑',60))
turtle.update()
turtle.done()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn