python开发小游戏太简单了,pygame简单使用练习

#游戏开发入门,练习使用pygame,小游戏毛毛虫吃豆子,游戏比较简单,大家可以自己再发挥

import pygame  #导入游戏模块,需要安装
import random  #导入随机数模块

from pygame.locals import * #导入常用属性及事件,比如按键
from sys import exit #系统模块的退出事件

# 初始化pygame,为使用硬件做准备
pygame.init()

# 创建一个窗口,分辨率(640, 480)
screen = pygame.display.set_mode((640, 480), 0, 32)
# 游戏的时间控制
clock=pygame.time.Clock()

# 设置窗口标题及文字字体
pygame.display.set_caption('hello 毛毛虫(F2 抛撒食物)!')
ft = pygame.font.SysFont('stsong', 40) # 设置字体,宋体,字体名字很难找,通过pygame.font.get_fonts()打印出来找的
#ft = pygame.font.SysFont('simHei', 40) # 设置字体,黑体
#ft = pygame.font.Font(r'C:\Windows\Fonts\simsun.ttc', 40) # 根据字体文件设置文字字体,宋体

# 用到的颜色
bg_sky=(135,206,235) #天空颜色
bg_grand=(102,205,0) #草地颜色
mmc_h=(255,99,71) #毛毛虫头
mmc_b=(240,128,128) #毛毛虫身
mmc_t=(240,128,128) #毛毛虫尾
food_c=(240,240,0) #食物颜色
bang_c=(139,123,139) #土障颜色
sun_c=(255,64,64) #太阳颜色
txt_c=(200,20,20) #文字颜色

# 绘制毛毛虫,简单了,就画几个圆圈
mmc=[[32,28],[33,28],[34,28],[35,28],[36,28]]  #初始毛毛虫的坐标
def draw_mmc():
    #画身体
    for x,y in mmc[1:len(mmc)-1]:
        pygame.draw.circle(screen,mmc_b,(x*10,y*10),5,0)
    #画尾部
    x,y=mmc[len(mmc)-1]
    pygame.draw.circle(screen,mmc_t,(x*10,y*10),3,0)
    #画头,最后画,免得回头时身体遮住了
    x,y=mmc[0]
    pygame.draw.circle(screen,mmc_h,(x*10,y*10),6,0)
    
#绘制食物
food=[]
def put_food():
    for i in range(10):
        x=random.randint(1,63)
        y=random.randint(30,47)
        pos=[x,y]
        if pos not in food+mmc+bang:food.append(pos)
    
def draw_food():
    for x,y in food:
        pygame.draw.circle(screen,food_c,(x*10,y*10),3,0)
    
#绘制障碍物
bang=[]
def put_bang():
    for i in range(500):
        x=random.randint(1,63)
        y=random.randint(30,47)
        pos=[x,y]
        if pos not in food+mmc+bang:bang.append(pos)
    
def draw_bang():
    for x,y in bang:
        pygame.draw.rect(screen,bang_c,[x*10-5,y*10-5,10,10],0)

# 按键控制
def k_down(k):
    tmp=mmc[0].copy()
    if k[K_UP]:
        if mmc[0][1]==1:return
        mmc[0][1]-=1 #头向上一格
    elif k[K_DOWN]:
        if mmc[0][1]==47:return
        mmc[0][1]+=1 #头向下一格
    elif k[K_LEFT]:
        if mmc[0][0]==1:return
        mmc[0][0]-=1 #头向左一格
    elif k[K_RIGHT]:
        if mmc[0][0]==63:return
        mmc[0][0]+=1 #头向右一格
    elif k[K_F2]:
        put_food() #撒食物
        return
    else:return
    
    #身体跟随
    for i in range(1,len(mmc)):
        tmp2=mmc[i].copy()
        mmc[i]=tmp
        tmp=tmp2
        if mmc[0] in food:
            food.remove(mmc[0])  #吃到食物,消除食物,身体增长
            mmc.append(tmp)
    
# 游戏主循环
Goon=True
put_food()  #生成食物坐标
put_bang()  #生成土墙坐标
while Goon:
    #把这个游戏调成多少帧,想跑的快就搞大点
    clock.tick(10)

    #处理消息事件
    for event in pygame.event.get():
        if event.type == QUIT:   #窗口右上角叉叉
            #接收到退出
            Goon=False
    #检查按键
    keys_pressed = pygame.key.get_pressed()  #这个返回键盘列表,按了的键就是True
    k_down(keys_pressed)  #处理按键

    #填充背景
    screen.fill(bg_sky,(0,0,640,280))  #蓝天
    pygame.draw.circle(screen,sun_c,(100,120),10,0) #太阳
    screen.fill(bg_grand,(0,280,640,480)) #草地

    #绘制食物
    draw_food()

    #绘制土墙
    draw_bang()
    
    #绘制毛毛虫
    draw_mmc()

    st_msg='go,go,go,加油干!'
    #吃完了
    if len(food)==0:
        st_msg='吃光了,你好棒,F2加餐!'
    #撞墙了
    if mmc[0] in bang:
        st_msg='吃到土了,再接再厉!'

    sf = ft.render(st_msg,1,txt_c) # 根据字体加颜色构建显示内容位块
    screen.blit(sf,(140,30))  # 把显示位块传送到显存里

    #刷新画面,两个方法都可以
    #pygame.display.update()
    pygame.display.flip() #把显存刷新到屏幕
    
pygame.quit()  #游戏结束,释放pygame,关闭窗口
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值