用turtle做游戏

turtle居然还能做游戏?当然能,turtle能做贪吃蛇、推箱子等游戏,由于篇幅过长,这里只展示视频链接:https://www.bilibili.com/video/BV1pa4y1D7tU/?spm_id_from=333.788

以上链接是blibli里 灰灰讲编程 里的

以下代码是一个较为完整的贪吃蛇代码(至少可以玩起来像样)

1、snake.py 文件代码(主文件):

import turtle
import random
from settings import *
from tools import draw_rect

def init():
    turtle.tracer(0)
    turtle.hideturtle()
    turtle.up()
    turtle.setup(w,h)
    turtle.title("贪吃蛇游戏")

def draw_bg():
    for row in range(row_num):
        for col in range(col_num):
            turtle.goto(tx+col*s,ty-row*s)
            c = colors['bg'][row%2==col%2]
            draw_rect(s,c,c)

def draw_tips():
    turtle.goto(tx, ty)
    turtle.color(colors['font'])
    turtle.write('得分: ' + str(score), 0,'left',('楷体',12,'normal')) # type: ignore
    if status == 0:
        turtle.goto(0,0)
        turtle.write('Game Over',0,'center',('楷体',80,'normal')) # type: ignore
    elif status == 2:
        turtle.goto(0,0)
        turtle.write('YOU WIN',0,'center',('楷体',80,'normal')) # type: ignore



def draw_foods():
    if len(foods) == 0 : build_foods()
    for row,col, fc in foods:
        x = tx + col * s
        y = ty - row * s
        turtle.goto(x,y)
        c = colors['food'][fc]
        draw_rect(s,c,c)

def draw_snakes():
    for row,col in snakes:
        x = tx + col * s
        y = ty - row * s
        turtle.goto(x,y)
        c = colors['snake'][0]
        draw_rect(s,c,c)

def collision():
    global score
    srow,scol = snakes[-1]
    for frow,fcol, _ in foods:
        if srow == frow and scol == fcol:
            foods.remove((frow,fcol, _))
            score += 1
            return True
    return False 

def check(srow,scol):
    global status
    if srow < 0 or scol < 0 or srow >= row_num or scol >= col_num:
        status = 0
    elif (srow,scol) in snakes:
        status = 0
    elif score >= 50:
        status = 2

def moving():
    row,col = snakes[-1]
    new_row = row + drow
    new_col = col + dcol
    check(new_row, new_col)
    if status == 1:
        snakes.append((new_row,new_col))
        if not collision():
            snakes.pop(0)

def build_foods(x = 50):
    while x > 0:
        frow = random.randint(0,row_num - 1)
        fcol = random.randint(0,col_num-1)
        fcolor = random.randint(0,len(colors['food'])-1)
        flag = 1
        for row,col, _ in foods:
            if frow == row and fcol == col:
                flag = 0
                break

        if(frow,fcol) in snakes:
            flag = 0
        if flag == 1:
            foods.append((frow,fcol,fcolor))
            x -= 1

def move_up():
    global drow,dcol
    drow = -1
    dcol = 0
def move_down():
    global drow,dcol
    drow = 1
    dcol = 0
def move_left():
    global drow,dcol
    drow = 0
    dcol = -1
def move_right():
    global drow,dcol
    drow = 0
    dcol = 1
turtle.onkey(move_up,'Up')
turtle.onkey(move_up,'w')
turtle.onkey(move_down,'Down')
turtle.onkey(move_down,'s')
turtle.onkey(move_left,'Left')
turtle.onkey(move_left,'a')
turtle.onkey(move_right,'Right')
turtle.onkey(move_right,'d')
turtle.listen()

def run():
    turtle.clear()
    if status == 1:
        moving()
    draw_bg()
    draw_tips()
    draw_foods()
    draw_snakes()
    turtle.update()
    turtle.ontimer(run,200)

def main():
    init()
    run()
    turtle.done()

以上代码实则不完善!大家可以自己去拓展(不代表不能玩)

settings.py 文件代码(设置):

s = 40
col_num = 20
row_num = 10
w = col_num*s + 2*s
h = row_num*s + 2*s

tx = -col_num/2 * s
ty = row_num/2 * s

score = 0

status = 1

snakes = [(3,3),(3,4),(3,5),(2,5)]
drow = 0
dcol = -1

foods = [(2,2,0),(1,10,1)]

walls = [s]

colors = {
    'bg':('#F2F2F2','#D2D2D2'),
    'snake':('#3232F2','#5252D2'),
    'food':('#E2E232','#32F232'),
    'font':('#EE0000')
}

以上代码同样不完善,自己去拓展

tools.py(辅助函数):

import turtle

def draw_rect(edge,bgcolor,bdcolor='#000000'):
    turtle.color(bdcolor,bgcolor)
    turtle.begin_fill()
    turtle.down()
    for i in range(4):
        turtle.forward(edge)
        turtle.right(90)
    turtle.up()
    turtle.end_fill()

以上代码自己去拓展pygame库。

还有一个文件,有了这个文件才能运行起来。

main.py(运行):

import snake

if __name__ == '__main__':
    snake.main()

以上是这个游戏所用到的所有文件。注意:以上代码实则不完善,需要自己去拓展、丰富这些内容。

再放一次链接,想照着打的可以照着打(照着打要与视频里保持一致)

https://www.bilibili.com/video/BV1pa4y1D7tU/?spm_id_from=333.788

可以使用Python自带的turtle库来制作滚动游戏。以下是一个简单的滚动游戏的示例代码: ```python import turtle import random # 设置窗口大小 WINDOW_WIDTH = 500 WINDOW_HEIGHT = 500 turtle.setup(WINDOW_WIDTH, WINDOW_HEIGHT) # 创建玩家角色 player = turtle.Turtle() player.shape("turtle") player.penup() player.goto(-200, 0) # 创建障碍物 obstacles = [] for i in range(10): obstacle = turtle.Turtle() obstacle.shape("square") obstacle.shapesize(2, 2) obstacle.color("red") obstacle.penup() obstacle.goto(random.randint(300, 800), random.randint(-200, 200)) obstacles.append(obstacle) # 设置滚动速度 scroll_speed = 5 # 定义移动函数 def move_left(): player.setheading(180) player.forward(10) def move_right(): player.setheading(0) player.forward(10) # 注册按键事件 turtle.listen() turtle.onkey(move_left, "Left") turtle.onkey(move_right, "Right") # 游戏循环 while True: # 移动障碍物 for obstacle in obstacles: obstacle.goto(obstacle.xcor() - scroll_speed, obstacle.ycor()) # 判断碰撞 if player.distance(obstacle) < 40: print("Game over") turtle.done() # 滚动背景 if player.xcor() > WINDOW_WIDTH / 2: player.goto(-WINDOW_WIDTH / 2, player.ycor()) for obstacle in obstacles: obstacle.goto(random.randint(300, 800), random.randint(-200, 200)) # 更新画面 turtle.update() ``` 在这个示例中,玩家控制一只乌龟,通过左右箭头键移动,避免撞到从右侧不断移动过来的障碍物。当玩家到达窗口的右侧时,背景会滚动,同时障碍物会重新随机生成。 你可以根据需要修改游戏元素的大小、颜色和移动速度等参数,以及添加得分、生命值等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值