事实上,一切看起来都不像是一场游戏。现在,我们将在此程序中插入一条规则。然后。这将成为一场游戏。规则很简单:从5x5 2D数组中计算红色或黑色,并选择数字更多的颜色!如果正确,则返回HP++,否则返回HP--。然后将为下一次测验设置新的数组!太简单了,但游戏可以在本教程中制作。首先,我们需要生成二维数组并打印出来。多么?我们学习了如何打印整数数据(等于单个数据(0D数组))和两个按钮(等于单个数组(1D数组))。二维阵列化只需一步多一步。

1import sys, pygame
2pygame.init()
3
4size = width, height = 320, 240
5speed = [2, 2]
6black = 0, 0, 0
7
8screen = pygame.display.set_mode(size)
9
10ball = pygame.image.load("AdvancedOutputAlpha1.gif")
11ballrect = ball.get_rect()
12
13while True:
14 for event in pygame.event.get():
15 if event.type == pygame.QUIT: sys.exit()
16
17 ballrect = ballrect.move(speed)
18 if ballrect.left < 0 or ballrect.right > width:
19 speed[0] = -speed[0]
20 if ballrect.top < 0 or ballrect.bottom > height:
21 speed[1] = -speed[1]
22
23 screen.fill(black)
24 screen.blit(ball, ballrect)
25 pygame.display.flip()

1import sys, pygame
2pygame.init()
3
4size = width, height = 320, 240
5speed = [2, 2]
6black = 0, 0, 0
7
8screen = pygame.display.set_mode(size)
9
10ball = pygame.image.load("AdvancedOutputAlpha2.gif")
11ballrect = ball.get_rect()
12
13while True:
14 for event in pygame.event.get():
15 if event.type == pygame.QUIT: sys.exit()
16
17 ballrect = ballrect.move(speed)
18 if ballrect.left < 0 or ballrect.right > width:
19 speed[0] = -speed[0]
20 if ballrect.top < 0 or ballrect.bottom > height:
21 speed[1] = -speed[1]
22
23 screen.fill(black)
24 screen.blit(ball, ballrect)
25 pygame.display.flip()

1import sys, pygame
2pygame.init()
3
4size = width, height = 320, 240
5speed = [2, 2]
6black = 0, 0, 0
7
8screen = pygame.display.set_mode(size)
9
10ball = pygame.image.load("AdvancedOutputAlpha3.gif")
11ballrect = ball.get_rect()
12
13while True:
14 for event in pygame.event.get():
15 if event.type == pygame.QUIT: sys.exit()
16
17 ballrect = ballrect.move(speed)
18 if ballrect.left < 0 or ballrect.right > width:
19 speed[0] = -speed[0]
20 if ballrect.top < 0 or ballrect.bottom > height:
21 speed[1] = -speed[1]
22
23 screen.fill(black)
24 screen.blit(ball, ballrect)
25 pygame.display.flip()
GenerateBoard函数返回随机生成的二维板,带有红块和黑块的个数。不用解释了。此外,Prtboard功能打印二维板的方法与一维阵列相同。输出颜色将根据板卡数据进行更改 [i] [j] 是否为1。此电路板仅用于输出。关于保证金的处理似乎很烦人,因为我们必须通过计算知道确切的位置。记住序言。PYGAME的输出(执行结果)是图形用户界面,而PYGAME的输入(编码)是CUI。这就是皮格比拼。
事实上,有很多改进这个游戏的想法。把按钮换成图像文件怎么样?在之前的选择正确与否的情况下添加音效怎么样?设定时间限制怎么样?当玩家赢(Max HP)或未赢(MinHP)时添加视觉效果如何?用另一种颜色把黑板做大一点怎么样?用给定的接口实现Flood-It游戏怎么样?仍然有很多选择,因为这个游戏很简单。
<参考代码>::
import pygame, sys, random
from pygame.locals import*
maxHP = 10
white = (255,255,255)
gray = (127,127,127)
black = (0,0,0)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
pygame.init()
pygame.display.set_caption("Red or Black Project")
width = 640
height = 480
myScreen = pygame.display.set_mode((width, height))
myTextFont = pygame.font.Font("HoonWhitecatR.ttf", 32)
myText = myTextFont.render((str(maxHP) + "/" + str(maxHP)), True, red, gray)
myTextArea = myText.get_rect()
myTextArea.center = (width/2, height/2)
fpsClock = pygame.time.Clock()
def main():
HP = 5
board, b_red, b_black = generateBoard(5,5) #1
while True:
myText = myTextFont.render((str(HP) + "/" + str(maxHP)), True, red, gray)
myScreen.fill(gray)
myScreen.blit(myText, myTextArea)
drawHP(HP)
drawButtons()
drawBoard(board) #2
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_UP:
if HP != 10:
HP = HP + 1
elif event.key == K_DOWN:
if HP != 0:
HP = HP - 1
elif event.type == MOUSEBUTTONUP:
x, y = event.pos
if pygame.Rect(270, 425, 45, 45).collidepoint(x, y): #3
if b_red >= b_black:
if HP != 10:
HP = HP + 1
board, b_red, b_black = generateBoard(5,5)
elif b_red < b_black:
if HP != 0:
HP = HP - 1
board, b_red, b_black = generateBoard(5,5)
elif pygame.Rect(325, 425, 45, 45).collidepoint(x, y): #4
if b_red <= b_black:
if HP != 10:
HP = HP + 1
board, b_red, b_black = generateBoard(5,5)
elif b_red > b_black:
if HP != 0:
HP = HP - 1
board, b_red, b_black = generateBoard(5,5)
pygame.display.update()
fpsClock.tick(60)
def drawHP(HP):
r = int((height - 40) / maxHP)
pygame.draw.rect(myScreen, gray, (20, 20, 20, 20 + ((maxHP - 0.5) * r)))
for i in range(maxHP):
if HP >= (maxHP - i):
pygame.draw.rect(myScreen, blue, (20, 20 + (i * r), 20, r))
pygame.draw.rect(myScreen, white, (20, 20 + (i * r), 20, r), 1)
return
def drawButtons():
r = 45
r_margin = 10
colors = [red, black]
num = 2
margin = int((width - ((r * num) + (r_margin * (num - 1)))) / 2)
for i in range(0, num):
left = margin + (i * r) + (i * r_margin)
up = height - r - 10
pygame.draw.rect(myScreen, colors[i], (left, up, r, r))
pygame.draw.rect(myScreen, gray, (left + 2, up + 2, r - 4, r - 4), 2)
def generateBoard(width, height): #5
board = []
b_red = 0
b_black = 0
for x in range(width):
column = []
for y in range(height):
column.append(random.randint(0, 1))
board.append(column)
for x in range(width):
for y in range(height):
if(board[x][y] == 1):
b_red = b_red + 1
elif(board[x][y] == 0):
b_black = b_black + 1
return board, b_red, b_black
def drawBoard(board): #6
r = 50
b_width = 5
b_height = 5
l_margin = int((width - (b_width * r)) / 2)
u_margin = int((height - (b_height * r)) / 2)
for x in range(5):
for y in range(5):
left = x * r + l_margin
up = y * r + u_margin
if board[x][y] == 1:
color = red;
elif board[x][y] == 0:
color = black
pygame.draw.rect(myScreen, color, (left, up, r, r))
left = l_margin
up = u_margin
pygame.draw.rect(myScreen, white, (left-1, up-1, r * 5 + 1, r * b_height + 1), 1)
if __name__ == '__main__':
main()
Edit on GitHub