一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - pygame學習筆記(6):完成一個簡單的游戲

pygame學習筆記(6):完成一個簡單的游戲

2020-06-07 10:08腳本之家 Python

這篇文章主要介紹了pygame學習筆記(6):完成一個簡單的游戲,本文綜合了學習過的知識,完成一個簡單的游戲開發,是本系列文章的最后一篇,需要的朋友可以參考下

學了這么長時間的Pygame,一直想寫個游戲實戰一下。看起來很簡單的游戲,寫其來怎么這么難。最初想寫個俄羅斯方塊,想了很長時間如何實現,想來想去,也沒寫出來,于是干脆下載別人的代碼來讀。后來,要想寫一個幫助記憶的挖寶箱的游戲,結果也沒完成。唯一完成了就是下面這個小人接金幣的游戲,超級簡單,通過左右鍵控制小人移動去接空中下來的金幣,接住金幣得5分,接不住游戲結束,金幣速度會隨著level的關數而越來越快。完成這段代碼后,我依然覺得這段代碼寫得很差,確實也是自己對pygame只是掌握了皮毛,對surface、sprite這些理解的還不透徹。這里把代碼寫出來,有時間的大牛們可以幫助指點一下,讓我也有所提高。

 

?
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
# -*- coding: cp936 -*-
'''
一個超級簡單的游戲
左右鍵控制小人移動去接空中下來的金幣,接住金幣得5分,接不住游戲結束,金幣速度會隨著level的關數
而越來越快
'''
import pygame,sys,os,random
pygame.init()
 
class rect():#畫出小人
  def __init__(self,filename,initial_position):
    self.image=pygame.image.load(filename)
    self.rect=self.image.get_rect()
    self.rect.topleft=initial_position
    
class goldrect(pygame.sprite.Sprite):#繪出金幣
  def __init__(self,gold_position,speed):
    pygame.sprite.Sprite.__init__(self)
    self.image=pygame.image.load('image\gold.png')
    self.rect=self.image.get_rect()
    self.rect.topleft=gold_position
    self.speed=speed
  def move(self):
    self.rect=self.rect.move(self.speed)
 
    
    
 
 
def drawback(): #繪出背景圖片
  my_back=pygame.image.load('image\qi3.jpg')
  bakscreen.blit(my_back,[0,0])
 
    
def loadtext(levelnum,score,highscore):#繪出成績、level、最高分等
  my_font=pygame.font.SysFont(None,24)
  levelstr='Level:'+str(levelnum)
  text_screen=my_font.render(levelstr, True, (255, 0, 0))
  bakscreen.blit(text_screen, (650,50))
  highscorestr='Higescore:'+str(highscore)
  text_screen=my_font.render(highscorestr, True, (255, 0, 0))
  bakscreen.blit(text_screen, (650,80))
  scorestr='Score:'+str(score)
  text_screen=my_font.render(scorestr, True, (255, 0, 0))
  bakscreen.blit(text_screen, (650,110)) 
 
def loadgameover(scorenum,highscore):#繪出GAME OVER
  my_font=pygame.font.SysFont(None,50)
  levelstr='GAME OVER'
  over_screen=my_font.render(levelstr, True, (255, 0, 0))
  bakscreen.blit(over_screen, (300,240))
  highscorestr='YOUR SCORE IS '+str(scorenum)
  over_screen=my_font.render(highscorestr, True, (255, 0, 0))
  bakscreen.blit(over_screen, (280,290))
  if scorenum>int(highscore):#寫入最高分
    highscorestr='YOUR HAVE GOT THE HIGHEST SCORE!'
    text_screen=my_font.render(highscorestr, True, (255, 0, 0))
    bakscreen.blit(text_screen, (100,340))
    highfile=open('highscore','w')
    highfile.writelines(str(scorenum))
    highfile.close()
  
def gethighscore(): #讀取最高分
  if os.path.isfile('highscore'):
    highfile=open('highscore','r')
    highscore=highfile.readline()
    highfile.close()
  else:
    highscore=0
  return highscore
         
bakscreen=pygame.display.set_mode([800,600])
bakscreen.fill([0,160,233])
pygame.display.set_caption('Dig!Dig!')
drawback()
 
 
 
levelnum=1 #level
scorenum=0 #得分
highscore=gethighscore()#最高分
ileft=1 #記錄向左移動步數,用來控制圖片
iright=10 #記錄向右移動步數,用來控制圖片
x=100
y=450
filename='image\1.png'
backimg_ren=rect(filename,[x,y])
bakscreen.blit(backimg_ren.image,backimg_ren.rect)
loadtext(levelnum,scorenum,highscore)
goldx=random.randint(50,580)
speed=[0,levelnum]
mygold=goldrect([goldx,100],speed)
pygame.display.update()
 
while True:
  if scorenum>0 and scorenum/50.0==int(scorenum/50.0):#當得分是50的倍數時修改level
    levelnum=scorenum/50+1
    speed=[0,levelnum]
  
  for event in pygame.event.get():
    if event.type==pygame.QUIT:
      sys.exit()
  #make gold 
 
  pressed_keys = pygame.key.get_pressed()
  if pressed_keys[pygame.K_LEFT]:#按下左鍵
 
    drawback()
    loadtext(levelnum,scorenum,highscore)
 
    if iright > 14 :iright=10
    iright=iright+1
    filename='image\'+str(iright)+'.png'
    if x<50 :
      x=50
    else:
      x=x-10
 
    backimg_surface=rect(filename,[x,y])
    bakscreen.blit(backimg_surface.image,backimg_surface.rect)
 
    
  if pressed_keys[pygame.K_RIGHT]:#按下右鍵
 
    drawback()
    loadtext(levelnum,scorenum,highscore)
 
    if ileft > 4 :ileft=0
    ileft=ileft+1
    filename='image\'+str(ileft)+'.png'
    if x>560:
      x=560
    else:
      x=x+10
 
    backimg_surface=rect(filename,[x,y])
    bakscreen.blit(backimg_surface.image,backimg_surface.rect)
 
  drawback()
  loadtext(levelnum,scorenum,highscore)
  mygold.move()
  bakscreen.blit(mygold.image,mygold.rect)
  
  backimg_surface=rect(filename,[x,y])
  bakscreen.blit(backimg_surface.image,backimg_surface.rect)
  if mygold.rect.top>600:#判斷金幣是否著地,一但著地,游戲結束
    loadgameover(scorenum,highscore)
  if mygold.rect.colliderect(backimg_surface.rect):#判斷金幣是否與小人碰撞,如果碰撞表示小人接到金幣
    scorenum+=5
    loadtext(levelnum,scorenum,highscore)
    goldx=random.randint(50,580)
    mygold=goldrect([goldx,100],speed)
  pygame.display.update()

程序中用到的資源可從這里下載:文件名:gold.7z, 訪問地址:http://www.kuaipan.cn/file/id_16699292408348719.htm

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲456在线播放 | 顶级欧美做受xxx000大乳 | 久久性生大片免费观看性 | 成人在线免费观看 | 蜜桃久久久亚洲精品成人 | 欧美性色欧美a在线播放 | 情侣奴伺候女王第2部分小说 | 小小水蜜桃3视频在线观看 小鸟酱喷水 | 失禁尿丝袜vk | 91香蕉官网| t66y地址一地址二地址三 | 免费看h片的网站 | 日韩每日更新 | 免费看1级伦理 | 精新精新国产自在现拍 | 国产免费视 | 青草国产在线视频 | 污小说h | 五月天婷婷网亚洲综合在线 | 日产2021免费一二三四区 | 青草视频久久 | 国产国语在线播放视频 | s8sp加密路线和免费路线首页 | 幻女free性俄罗斯第一次摘花 | 啊皇上你好大要知画 | 国产精品天天影视久久综合网 | 欧美在线播放成人免费 | 亚洲欧美视频在线播放 | 男女发生性关系视频 | 32d乳白色的奶罩未删除 | 亚洲精品高清中文字幕完整版 | 亚洲欧美专区精品伊人久久 | 7mav视频 | 蜜桃视频在线观看官网 | 午夜成私人影院在线观看 | 国产亚洲一级精品久久 | 手机看片自拍自自拍日韩免费 | 国产精品亚洲午夜一区二区三区 | 国产午夜精品久久理论片 | 岛国在线播放v片免费 | 亚洲AV人无码综合在线观看蜜桃 |