当前位置:   article > 正文

pygame初识_syssbg

syssbg

本人大二·,基本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)
        #设置帧
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

然后简单说下,分为三部分,准备工作,游戏流程,更新画面
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 )
#设置窗口图标
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

。。。。等等

在游戏进程中我们可以接收事件,例如鼠标事件,键盘事件等

pygame.KEYDOWN    #键盘按下事件
pygame.K_ESCAPE   #Esc键
pygame.K_UP       #向上键
  • 1
  • 2
  • 3

。。。。等

最后在刷新之前还要进行图像的绘制

 screen.fill(screencolor)
 #填充背景颜色
 screen.blit( surface , surfacerect )
 #填充图像到它的矩形位置
  • 1
  • 2
  • 3
  • 4

小结: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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263

大概就是这样哈,希望对像我这样的python小白有所帮助

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/127173
推荐阅读
相关标签
  

闽ICP备14008679号