[파이썬 작은 게임 만들기] "큰 물고기가 작은 물고기를 잡아먹는다"는 기사를 직접 만들어 보세요.

비교적 시간이 촉박하고, 이 자료는 상대적으로 누수가 되므로 살펴보도록 하겠습니다. 키는 조작에 따라 다릅니다.
둘째, 오늘 결혼해요 다들 축복하고
만우절 되세요 하하하~ 요즘 조카가 큰물고기 놀고 작은물고기로 다투는 요즘입니다. 조치를 취해야 하는데 안 하고 2분 놀다보니 너무 못생겼다는 생각이 들긴 하지만 공유해야 할 것 같아요. 역시 전문가인 우리는 여전히 출입구 쪽을 바라보고 있습니다~
여기에 이미지 설명 삽입

1. 게임 화면

여기에 이미지 설명 삽입

2. 게임 소재

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

3. 프로그램 소개

"""
   大鱼吃小鱼.py
   注意程序的mouth对象,它并不是"隐藏"的,虽然它看不见。
   小鱼碰到mouth会被“吃掉”。如果把mouth用hide命令设为隐藏,那么是无法获取到mouth的绑定盒,从而碰撞检测失效。
   
"""

4. 게임 코드

1. 스프라이트 객체. 이 함수는 사각형의 오른쪽 아래 모서리 좌표를 계산하고 반환합니다.

from sprites import *

def calculate_pos(obj):
    """obj:精灵对象。这个函数计算矩形下右角的一个坐标并返回它。

    """    
    x,y = obj.position()              # 角色的坐标
    mx,my = mouse_position()          # 鼠标指针的坐标
    k = 1 if mx > x else -1           # 在右则为1,否则为-1
    left,top,right,bottom = obj.bbox()# 获取绑定盒
    w = right-left                    # 大鱼的宽度
    h = top - bottom                  # 大鱼的高度
    x0 = x + k * w//2.5               # 嘴巴大概的x坐标
    y0 = y - h//12                    # 嘴巴大概的y坐标
    return x0,y0

2. 게임 속성 설정

width,height = 480,360                
screen = Screen()                     # 新建宽高
screen.setup(width,height)            # 设置宽高 
screen.bgpic('res/underwater.png')    # 设背景图
screen.title("图灵大海之大鱼吃小鱼")

3. 게임 오브젝트

fish_group = Group(tag='fish')        # 新建组,标签为fish
fishes = ['res/fish1.png','res/fish2.png','res/fish3.png','res/crab-b.png']
# 由于下面的鱼的标签都是fish,所以会自动加入到fish_group中
for x in range(10):
     x = random.randint(-200,200)
     y = random.randint(-140,140)
     f = Sprite(shape=random.choice(fishes),tag='fish',pos=(x,y))
     f.scale(0.5)
[fish.setheading(random.randint(1,360)) for fish in fish_group]
 
m1 = Mouse(1)                        # 鼠标左键
fish = Sprite('res/fish1-a.png')     # 实例化大鱼
fish.rotatemode(1)                   # 左右翻转 
fishscale= 0.6
fish.scale(fishscale)
mouth = Sprite(shape='circle')       # 实例化嘴巴,用于碰撞检测
mouthscale = 0.4
mouth.scale(mouthscale)              # 缩放嘴巴大小
mouth.setalpha(0)                    # 把它设为透明,改为非0它会显示出来
clock = Clock()                      # 新建时钟对象

4. 게임 다이나믹 효과

while True:
    for f in fish_group:
        if f.isvisible():f.fd(1)     # 在可见的情况下才移动
        # 小鱼碰到嘴巴及单击鼠标则被吃掉,大鱼长大
        if f.collide(mouth,0.5) and m1.down() :
            fishscale += 0.01
            fish.scale(fishscale)     # 大鱼长大
            mouthscale += 0.01
            mouth.scale(mouthscale)   # 嘴巴跟着加大
            x = random.randint(-200,200)
            y = random.randint(-140,140)
            # 注意这里调用了reborn后,鱼会立即隐藏,3后后出现
            # 在3秒内碰撞检测无效,所以鱼不能动
            f.reborn(x,y,delay=3)
            f.shape(random.choice(fishes))            
        f.bounce_on_edge()
        
    fish.heading(mouse_pos())        # 大鱼跟随鼠标指针
    x0,y0 = calculate_pos(fish)      # 计算嘴巴的大概坐标
    mouth.goto(x0,y0)                # 嘴巴大这个坐标 
    md =  fish.distance(mouse_pos()) # 计算鱼到鼠标指针距离
    if md > 50:fish.fd(min(md,4))    # 如果距离大于50则游

    # 张嘴与合嘴
    if m1.down():
        fish.shape('res/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)
  fish.shape('res/fish1-a.png')
    else:
        fish.shape('res/fish1-b.png')
    screen.update()
    clock.tick(60)

다섯 번째: 경험 요약

옛날 사람으로서 파이썬으로 삼촌이든 매운음식 한조각이든 아직까지 할말이 남다르네요 매운거 싫어하시는 분들은 보시면 아시겠지만 bottom ~ 영화, 각종 파이썬 소스코드, 그 다음 PDF 문서 등, 예전에 써본 것들이지만 모두가 싫어하지 않는 한 여전히 어느 정도 유용하다.
여기에 이미지 설명 삽입

추천

출처blog.csdn.net/AI19970205/article/details/123870072