python黑白棋 pygame_玩转pygame——游戏开发

使用pygame进行游戏开发

Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让游戏开发者不再被底层语言束缚,可以更多的关注游戏的功能和逻辑。

具体功能可以查看pygame的官方网站

五子棋游戏制作

制作游戏窗口

可以通过pygame中draw模块的函数在窗口上绘图,可以绘制的图形包括:线条、矩形、多边形、圆、椭圆、圆弧等。需要说明的是,屏幕坐标系是将屏幕左上角设置为坐标原点(0, 0),向右是x轴的正向,向下是y轴的正向,在表示位置或者设置尺寸的时候,我们默认的单位都是像素。所谓像素就是屏幕上的一个点,你可以用浏览图片的软件试着将一张图片放大若干倍,就可以看到这些点。pygame中表示颜色用的是色光三原色表示法,即通过一个元组或列表来指定颜色的RGB值,每个值都在0~255之间,因为是每种原色都用一个8位(bit)的值来表示,三种颜色相当于一共由24位构成,这也就是常说的“24位颜色表示法”。

import pygame

def main():

# 初始化导入的pygame中的模块

pygame.init()

screen = pygame.display.set_mode([640, 640]) # 初始化用于显示的窗口并设置窗口尺寸

pygame.display.set_caption('五子棋') # 设置当前窗口的标题

screen.fill([218, 165, 105]) # 填充背景色 红绿蓝三原色

running = True

while running: # 开启一个事件循环处理发生的事件

for event in pygame.event.get(): # 从消息队列中获取事件并对事件进行处理

if event.type == pygame.QUIT:

running = False

if __name__ == '__main__':

main()

画棋盘

创建棋子类对象和棋盘类对象,棋盘类里面创建一个15*15的数组的属性,再写一个重置棋盘的方法,令这个棋盘数组全部等于空,还有画棋盘的方法,通过pygame的draw模块在窗口上绘画棋盘、天元、边框和棋子,还有一个判断该位置是否有棋子,可以下的方法

class Chess(object):

"""棋子类"""

def __init__(self, x, y, is_black):

self._is_black = is_black

self._row = x

self._col = y

@property

def is_black(self):

return self._is_black

@property

def row(self):

return self._row

@property

def col(self):

return self._col

class RenjuBoard(object):

"""棋盘类"""

def __init__(self):

self._board = [[]] * 15

self.reset()

def reset(self):

"""重置棋盘"""

for row in range(len(self._board)):

self._board[row] = [EMPTY] * 15

def move(self, row, col, is_black):

"""判断是否有棋子"""

if self._board[row][col] == EMPTY:

self._board[row][col] = BLACK if is_black else WHITE

return True

return False

def draw(self, screen):

"""画棋盘"""

for i in range(1, 16): # 画格子:窗口,颜色,起始位置,结束位置,粗细

pygame.draw.line(screen, black_color, [40, 40 * i], [600, 40 * i], 1)

pygame.draw.line(screen, black_color, [40 * i, 40], [40 * i, 600], 1)

pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 4) # 画边框

# 画圆 窗口,颜色,位置,半径,0实心

pygame.draw.circle(screen, black_color, [320, 320], 4, 0)

pygame.draw.circle(screen, black_color, [160, 160], 3, 0)

pygame.draw.circle(screen, black_color, [160, 480], 3, 0)

pygame.draw.circle(screen, black_color, [480, 480], 3, 0)

pygame.draw.circle(screen, black_color, [480, 160], 3, 0)

for row in range(len(self._board)):

for col in range(len(self._board[row])):

if self._board[row][col] != EMPTY:

ccolor = black_color if self._board[row][col] == BLACK else white_color

pos = [40 * (col + 1), 40 * (row + 1)]

pygame.draw.circle(screen, ccolor, pos, 20, 0)

完善主函数 事件处理

判断输赢,绘画文字,获取鼠标点击事件,绘画棋盘等

def main():

board = RenjuBoard() # 创建棋盘对象

chess = [[EMPTY] * 16 for _ in range(16)] # 棋子位置

is_black = True # 黑白棋分辨变量

pygame.init() # 初始化pygame

screen = pygame.display.set_mode([640, 640]) # 初始化用于显示的窗口并设置窗口尺寸

pygame.display.set_caption('五子棋') # 设置当前窗口的标题

screen.fill([218, 165, 105]) # 填充背景色 红绿蓝三原色

board.draw(screen) # 画棋盘

pygame.display.flip() # 刷新窗口

runing = True # 是否退出游戏变量

gameover = True # 游戏是否结束变量

while runing: # 开启一个事件循环处理发生的事件

for event in pygame.event.get(): # 从消息队列中获取事件并对事件进行处理

if event.type == pygame.QUIT:

runing = False

elif event.type == pygame.KEYUP:

if event.key == pygame.K_F2:

board.reset()

gameover = True

is_black = True

pygame.display.flip()

elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1 and gameover: # 鼠标点击事件

x, y = event.pos

if 20 < x <= 600 and 20 < y < 600:

row = round((y - 40) / 40)

col = round((x - 40) / 40)

if board.move(row, col, is_black):

screen.fill([218, 165, 105])

board.draw(screen)

chess[col][row] = 1 if is_black

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值