赞
踩
本人大二·,基本pathon小白
因为自己想做一个游戏就在假期里大概花了一周的时间,看了些关于pygame相关的视频,然后自己动手敲了敲,本篇当作一个小的总结和梳理,来梳理下创作经历
首先建立一个最小游戏框架:
import pygame,sys #引入pygame和sys pygame.init() #初始化pygame pygame.display.set_mode( size ) #初始化显示窗口,参数size是一个二值元组,分别表示窗口的宽,高 pygame.display.set_caption( title ) #窗口上面的标题内容,title是内容,类型为字符串 while True: for event in pygame.event.get( ): #接收事件 if event.type == pygame.QUIT: #窗口右上角的 x sys.exit( ) #退出游戏 pygame.display.flip( ) #更新画面 fclock.tick(fps) #设置帧
然后简单说下,分为三部分,准备工作,游戏流程,更新画面
pygame就像是制作flash动画,下一帧对上一帧进行覆盖
如果你不更新画面的话就会一直显示第一帧
其次,fps控制游戏速度
然后准备工作我们还可以做类似下面的工作:
screencolor = 0,0,0 #屏幕颜色,由红,黄,蓝三原色构成,0~255 ,0,0,0为黑色 surface = pygame.image.load("这里写文件路径" ) #图片载入,返回surface对象 surfacerect = surface.get_rect() #返回一个图片大小的矩形 (用于对图片进行操作) surfacerect.top = xx surfacerect.left = xx #这里是对矩形初始位置进行设定,坐标系为笛卡尔坐标系,(0,0)点在窗口左上角,top为窗口内上边到矩形上边,left为窗口内左边到矩形左边,单位是像素 pyame.mixer.music.load("这里写文件路径") #音乐载入 pygame.mixer.music.set_volume( x) #音乐音量, x为音量大小 pygame.mixer.music.play() #播放音乐 pygame.display.set_icon( surface ) #设置窗口图标
。。。。等等
在游戏进程中我们可以接收事件,例如鼠标事件,键盘事件等
pygame.KEYDOWN #键盘按下事件
pygame.K_ESCAPE #Esc键
pygame.K_UP #向上键
。。。。等
最后在刷新之前还要进行图像的绘制
screen.fill(screencolor)
#填充背景颜色
screen.blit( surface , surfacerect )
#填充图像到它的矩形位置
小结:pygame游戏像是在做flash动画, 前一帧会被下一帧所覆盖,不能直接对图像进行操作,需要取它的边框,然后对边框操作,最后在将图像绘制在上面
本来计划是主游戏里可以有一个弹窗游戏,但发现pygame无法产生弹窗而放弃用pygame制作游戏了,只是完成了半个弹窗游戏,下面是这个小程序的代码(不能称为游戏):
import pygame import sys import random import pygame.font #初始化 pygame.init() #窗口设置 size = width,height = 600, 500 screen = pygame.display.set_mode( size ) #窗口颜色 screencolor = 0, 0, 0 #窗口背景 screenbackground1 = pygame.image.load("1.jpg") screenbackground2 = pygame.image.load("2.jpg") screenbackground3 = pygame.image.load("3.jpg") screenbackground4 = pygame.image.load("4.jpg") screenbackground5 = pygame.image.load("5.jpg") screenbackground6 = pygame.image.load("6.jpg") screenbackground7 = pygame.image.load("7.jpg") screenbackground8 = pygame.image.load("8.jpg") screenbackground9 = pygame.image.load("9.jpg") screenbackground10 = pygame.image.load("10.jpg") screenbackground11 = pygame.image.load("11.jpg") screenbackground12 = pygame.image.load("12.jpg") screenbackground13 = pygame.image.load("13.jpg") screenbackground14 = pygame.image.load("14.jpg") screenbackground15 = pygame.image.load("15.jpg") screenbackground16 = pygame.image.load("16.jpg") screenbackground17 = pygame.image.load("17.jpg") screenbackground18 = pygame.image.load("18.jpg") screenbackground19 = pygame.image.load("19.jpg") screenbackground20 = pygame.image.load("20.jpg") screenbackground21 = pygame.image.load("21.jpg") screenbackground22 = pygame.image.load("22.jpg") sbg = screenbackground1,screenbackground2,screenbackground3,screenbackground4,screenbackground5,screenbackground6,screenbackground7,screenbackground8,screenbackground9,screenbackground10,screenbackground11,screenbackground12,screenbackground13,screenbackground14,screenbackground15,screenbackground16,screenbackground17,screenbackground18,screenbackground19,screenbackground20,screenbackground21,screenbackground22 sbgrect1 = sbg[0].get_rect() sbgrect2 = sbg[1].get_rect() sbgrect3 = sbg[2].get_rect() sbgrect4 = sbg[3].get_rect() sbgrect5 = sbg[4].get_rect() sbgrect6 = sbg[5].get_rect() sbgrect7 = sbg[6].get_rect() sbgrect8 = sbg[7].get_rect() sbgrect9 = sbg[8].get_rect() sbgrect10 = sbg[9].get_rect() sbgrect11 = sbg[10].get_rect() sbgrect12 = sbg[11].get_rect() sbgrect13 = sbg[12].get_rect() sbgrect14 = sbg[13].get_rect() sbgrect15 = sbg[14].get_rect() sbgrect16 = sbg[15].get_rect() sbgrect17 = sbg[16].get_rect() sbgrect18 = sbg[17].get_rect() sbgrect19 = sbg[18].get_rect() sbgrect20 = sbg[19].get_rect() sbgrect21 = sbg[20].get_rect() sbgrect22 = sbg[21].get_rect() sbgrect = sbgrect1,sbgrect2,sbgrect3,sbgrect4,sbgrect5,sbgrect6,sbgrect7,sbgrect8,sbgrect9,sbgrect10,sbgrect11,sbgrect12,sbgrect13,sbgrect14,sbgrect15,sbgrect16,sbgrect17,sbgrect18,sbgrect19,sbgrect20,sbgrect21,sbgrect22 sbgrectz1 = sbgrect1 sbgrectz2 = sbgrect2 sbgrectz1.top = 0 sbgrectz1.left = 0 sbgrectz2.top = 0 sbgrectz2.left = 600 #开始按钮图片 begin = pygame.image.load("开始按钮.jpg") beginrect = begin.get_rect() beginrect.top = 146 beginrect.left = 300 #背景音乐 pygame.mixer.music.load("music.mp3") pygame.mixer.music.set_volume(0.2) pygame.mixer.music.play() #跳跃音效 jump_sound = pygame.mixer.Sound("跳跃测试音效.wav") jump_sound.set_volume(0.2) #得分音效 add_sound = pygame.mixer.Sound("得分测试音效.wav") add_sound.set_volume(0.2) #背景速度 bgspeed = [-3,0] #hero的速度 speed = [0,0] #游戏命名 pygame.display.set_caption("原石收集者") #窗口图标 topphoto = pygame.image.load("原石1.jpg") pygame.display.set_icon(topphoto) #hero hero1 = pygame.image.load("人物移动1.jpg") hero2 = pygame.image.load("人物移动2.jpg") hero3 = pygame.image.load("人物移动3.jpg") hero4 = pygame.image.load("人物移动4.jpg") hero5 = pygame.image.load("人物移动5.jpg") hero = [hero1,hero2,hero3,hero4,hero5] herorect = hero1.get_rect() herorect.top = 400 - herorect.height herorect.left = 50 #敌人 enemy = pygame.image.load("原石2.jpg") enemyrect = enemy.get_rect() enemyrect.top = 30 enemyrect.left = 600 enemyspeed = [-4,0] #计分板 t = '0' selffont = pygame.font.SysFont( None, 48) selffont1 = selffont.render(t, True, (255, 255, 255),(0,0,0)) selffontrect = selffont1.get_rect() selffontrect.top = 450 selffontrect.left = 50 #fps fps=30 fclock = pygame.time.Clock() #控制人物动作变化 i = 0 j = 0 #控制背景 k = 0 l = 1 #控制游戏发生 running = 0 #菜单事件 while True: #单曲循环 if pygame.mixer.music.get_busy() != 1: pygame.mixer.music.play() #获得鼠标状态 n1, n2 = pygame.mouse.get_pos() n3 = pygame.mouse.get_pressed() #获得事件 for event in pygame.event.get() : #用户点右上×,退出 if event.type == pygame.QUIT: pygame.quit() sys.exit() #Esc退出 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() if n1 >300 and n1<533 and n2<250 and n2>146 and n3 == (1,0,0) : print (n3) running = 1 break #填充画面 screen.fill(screencolor) #填入背景 screen.blit(sbg[0],sbgrectz1) #画开始按钮 screen.blit(begin,beginrect) #将人物绘制到屏幕上 screen.blit(hero[i],herorect) #画计分板 screen.blit(selffont1, selffontrect) #更新画面 pygame.display.flip() #设置帧 fclock.tick(fps) #游戏事件 while running: #单曲循环 if pygame.mixer.music.get_busy() != 1: pygame.mixer.music.play() #获得事件 for event in pygame.event.get() : #用户点右上×,退出 if event.type == pygame.QUIT: pygame.quit() sys.exit() #Esc退出 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() elif event.key == pygame.K_SPACE and speed[1] == 0: jump_sound.play() speed[1] = -25 #角色移动 herorect = herorect.move(speed[0],speed[1]) enemyrect = enemyrect.move(enemyspeed[0],enemyspeed[1]) #背景移动 sbgrectz1 = sbgrectz1.move(bgspeed[0], bgspeed[1]) sbgrectz2 = sbgrectz2.move(bgspeed[0],bgspeed[1]) #背景复现 if sbgrectz1.left == -600 : sbgrectz1.left = 600 k = k + 2 if k == 22: k = 0 if sbgrectz2.left == -600 : l = l + 2 sbgrectz2.left = 600 if l == 21: l = 1 #重力 if herorect.top + herorect.height >= 400 : speed[1] = 0 else: speed[1] = speed[1] + 1 #填充画面 screen.fill(screencolor) #填入背景 screen.blit(sbg[k], sbgrectz1) screen.blit(sbg[l],sbgrectz2) #将人物绘制到屏幕上 screen.blit(hero[i],herorect) #碰撞 if abs(herorect.top - enemyrect.top) > 66 or enemyrect.left - herorect.left > 50 : screen.blit(enemy,enemyrect) elif enemyrect.left < 0: enemyrect.top = 150*random.randint(0,2) enemyrect.left = 655 else: t = t + '0' add_sound.play() selffont1 = selffont.render(t, True, (255, 255, 255),(0,0,0)) selffontrect = selffont1.get_rect() selffontrect.top = 450 selffontrect.left = 50 enemyrect.top = 150*random.randint(0,2) enemyrect.left = 655 j = j + 1 if j == 5: i = i + 1 j = 0 if i == 4: i = 0 #画计分板 screen.blit(selffont1, selffontrect) #更新画面 pygame.display.flip() #设置帧 fclock.tick(fps)
大概就是这样哈,希望对像我这样的python小白有所帮助
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。