python猫和老鼠

这是一个使用Python的Turtle库和pygame模块创建的互动游戏。游戏中,玩家控制一只猫,目标是在限定时间内捕获尽可能多的老鼠,同时避开小狗。游戏分为三个关卡,每个关卡难度递增,时间限制分别为60秒、120秒和180秒。玩家的分数根据捕获的老鼠数量计算,若生命值耗尽或时间用完,游戏结束。游戏还包括背景音乐和各种音效,增强了游戏体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import turtle as t
import random
import time
import simpleaudio as sa
import tkinter
import pygame

# def func():
#     print("hello")
#     
# win=tkinter.Tk()
# win.title("窗体")
# win.geometry("400x400+200+50")
# 
# button=tkinter.Button(win,text="按钮",command=func)
# button.pack()

game1_over=False
game2_over=False
game2_begin=False
game3_over=False
game3_begin=False

t.register_shape("tom.gif")
t.register_shape("rat.gif")
t.register_shape("rat2.gif")
t.register_shape("dog.gif")
t.register_shape("bigdog.gif")


oh=sa.WaveObject.from_wave_file("ohh.wav")
point=sa.WaveObject.from_wave_file("point.wav")
over=sa.WaveObject.from_wave_file("over.wav")
victory=sa.WaveObject.from_wave_file("victory.wav")

pygame.mixer.init()
pygame.mixer.music.load("bgm.wav")
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play()

#记录时间
start_time=time.time()
used_time=0

#3.创建背景
game=t.Screen()
game.setup(1280,1024)
game.bgpic("bg2-.gif")
t.tracer(10)

#4.创建猫咪
cat=t.Turtle()
cat.shape("tom.gif")
cat.up()
score=0
life=3

pen3=t.Turtle()
pen3.ht()
pen3.speed(0)
pen3.up()
pen3.goto(-620,440)
score_text="Life:{}  Point:{}".format(life,score)
font=('Arial',20,'bold')
pen3.color('seagreen')
pen3.write(score_text,align='left',font=font)

pen5=t.Turtle()
pen5.ht()
pen5.speed(0)
pen5.up()
pen5.goto(-70,440)
font=('Arial',20,'bold')
pen5.color('darkslategray')
pen5.write("Level one",align='left',font=font)

#17.加上计时
pen=t.Turtle()
pen.ht()
pen.up()
pen.setpos(420,440)
pen.color("seagreen")
pen.write("Time",align="left",font=("Arial",20,"bold"))

pen2=t.Turtle()
pen2.ht()
pen2.up()
pen2.setpos(560,440)
pen2.color("seagreen")

def update_time():
    global used_time
    now_used_time=int(time.time()-start_time)
    
    if now_used_time>used_time:
        used_time=now_used_time
        time_str=str(used_time)
        pen2.clear()
        pen2.write(time_str,align="left",font=("Arial",20,"bold"))
        if used_time >= 50:
            pen2.color("darkred")

#11.创建小老鼠:传入图形和数量
def create_rats(shape,number):
    rats_list=[]
    for rat in range(number):
        rat = t.Turtle()
        rat.ht() #hideturtle
        rat.up()
        rat.speed(0)
        rat.left(random.randint(0,360))
        rat.shape(shape)
        x=random.randint(-640,640)
        y=random.randint(-500,400)
        rat.setpos(x,y)
        rat.st() #showturtle
        rats_list.append(rat)
    return rats_list

rat1_list=create_rats("rat.gif",6)
rat2_list=create_rats("rat2.gif",4)
dog1_list=create_rats("dog.gif",3) 
#dog2_list=create_rats("bigdog.gif",3)



def move_left():
    cat.left(30)
    
def move_right():
    cat.right(30)
    
def speedup():
    global cat_speed
    cat_speed += 1
    
def slowdown():
    global cat_speed
    cat_speed -= 1

def catch_rat(rat,add_score):
    global score
    if cat.distance(rat)<60:
        point.play()
        x=random.randint(-640,640)
        y=random.randint(-500,400)
        rat.setpos(x,y)
        score=score+add_score
        pen3.clear()
        pen3.write("Life:{}  Point:{}".format(life,score),align='left',font=font)
        
def move_rat(rat,score,speed):
    rat.fd(speed) #棕色老鼠的速度
    catch_rat(rat,score)
    x=rat.xcor()
    y=rat.ycor()
    if x>640 or x<-640 or y>400 or y<-500:
        rat.left(180)

def move_dog(dog_list,point,speed):
    global life
    global score
    for dog in dog_list:
        dog.fd(speed) #狗的速度
        if cat.distance(dog)<50:
            oh.play()
            dog.ht()
            dog_list.remove(dog)
            life=life-1;
            score=score-point;
            pen3.clear()
            font=('Arial',20,'bold')
            pen3.write("Life:{}  Point:{}".format(life,score),align='left',font=font)
#             if life == 0 :
#                 over.play()
#                 game_over=1
#                 pen4=t.Turtle()
#                 pen4.ht()
#                 pen4.speed(0)
#                 pen4.up()
#                 pen4.goto(-420,0)
#                 font=('Arial',30,'bold')
#                 pen4.color('silver')
#                 over_str="Game Over!  "+str(score)+" points"
#                 pen4.write(over_str,align='left',font=font) 
        x=dog.xcor()
        y=dog.ycor()
        if x>640 or x<-640 or y>400 or y<-500:
            dog.left(180)
            
def lose():
    over.play()
    pygame.mixer.music.pause()
    pen4=t.Turtle()
    pen4.ht()
    pen4.speed(0)
    pen4.up()
    pen4.goto(-420,0)
    font=('Arial',30,'bold')
    pen4.color('silver')
    over_str="Game Over!  "+str(score)+" points"
    pen4.write(over_str,align='left',font=font) 

t.listen()
t.onkey(move_left,"Left")
t.onkey(move_right,"Right")
t.onkey(speedup,"Up")
t.onkey(slowdown,"Down")

cat_speed = 1
while 1:
    #判断游戏结束
    if game1_over:
        break
    
    update_time()
    cat.fd(cat_speed)
    x=cat.xcor()
    y=cat.ycor()
    if x>640 or x<-640 or y>400 or y<-500:
        cat.left(180)
    
    #12小老鼠动起来
    for rat in rat1_list:
        move_rat(rat,10,1)    
    for rat in rat2_list:
        move_rat(rat,20,2)
    
    #13小狗动起来
    move_dog(dog1_list,15,3)           
    
    #判断第一关结束
    if used_time==60:
        game1_over=1
        if score>=250:
            game2_begin=True
            victory.play()
            pen5.clear()
            pen5.write("Level two",align='left',font=font)
        else:
            pygame.mixer.music.pause()
            over.play()
            pen4=t.Turtle()
            pen4.ht()
            pen4.speed(0)
            pen4.up()
            pen4.goto(-420,0)
            font=('Arial',30,'bold')
            pen4.color('silver')
            over_str="Game Over!  "+str(score)+" points"
            pen4.write(over_str,align='left',font=font)
    if life==0:
        lose()
        game1_over=1

#第二关开始         
if game2_begin:
    dog2_list=create_rats("bigdog.gif",3)
    life=3
    while 2:
        if game2_over:
            break
        
        update_time()
        cat.fd(cat_speed)
        x=cat.xcor()
        y=cat.ycor()
        if x>640 or x<-640 or y>400 or y<-500:
            cat.left(180)
            
        for rat in rat1_list:
            move_rat(rat,10,1)           
        for rat in rat2_list:
            move_rat(rat,20,2)
        
        move_dog(dog1_list,15,3)
        move_dog(dog2_list,-20,3)
            
        if used_time==120:
            game2_over=1
            if score>=500:
                game3_begin=True
                victory.play()
                pen5.clear()
                pen5.write("Level Three",align='left',font=font)
            else:
                pygame.mixer.music.pause()
                over.play()
                pen4=t.Turtle()
                pen4.ht()
                pen4.speed(0)
                pen4.up()
                pen4.goto(-420,0)
                font=('Arial',30,'bold')
                pen4.color('silver')
                over_str="Game Over!  "+str(score)+" points"
                pen4.write(over_str,align='left',font=font)
                
        if life==0:
            game2_over=1
            lose()

#第三关开始
if game3_begin:
    life=3
    while 2:
        if game3_over:
            break
        
        update_time()
        cat.fd(cat_speed)
        x=cat.xcor()
        y=cat.ycor()
        if x>640 or x<-640 or y>400 or y<-500:
            cat.left(180)
            
        for rat in rat1_list:
            move_rat(rat,10,2)
        for rat in rat2_list:
            move_rat(rat,20,3)
        
        move_dog(dog1_list,15,4)
        move_dog(dog2_list,-20,4)
            
        if used_time==180:
            pygame.mixer.music.pause()
            game3_over=1
            if score>=1000:
                victory.play()
                bgm.stop()
                pen6=t.Turtle()
                pen6.ht()
                pen6.speed(0)
                pen6.up()
                pen6.goto(-550,0)
                font=('Arial',25,'bold')
                pen6.color('coral')
                over_str="Congratulations! You Win!"+str(score)+" points"
                pen6.write(over_str,align='left',font=font)
            else:
                over.play()
                pen4=t.Turtle()
                pen4.ht()
                pen4.speed(0)
                pen4.up()
                pen4.goto(-420,0)
                font=('Arial',30,'bold')
                pen4.color('silver')
                over_str="Game Over!  "+str(score)+" points"
                pen4.write(over_str,align='left',font=font)
        if life==0:
            game3_over=1
            lose()

game.mainloop()    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值