很早之前写了一个类似的五子棋,没有做到pygame里面,闲着没事给整过来了,主要就是加了一个鼠标映射坐标。

表情被锤会变脸。

设置的0积分不知道能不能下载

https://download.csdn.net/download/ChillingKangaroo/82109145

代码不多,主要是由几个图片

import pygame as pg
import math
import time
import randomclass Tile(): def __init__(self,grid_size,screen_size,x,y): #一个坐标单位self.x,self.y = x,yself.grid_size = grid_sizeself.rectangle = (self.x*tile_size[0]+50,self.y*tile_size[1]+50,tile_size[0],tile_size[1])self.points = [ [(0.5+self.x)*tile_size[0]+50,self.y*tile_size[1]+50],    #upper middle[(0.5+self.x)*tile_size[0]+50,(self.y+1)*tile_size[1]+50],    #lower middle[(self.x)*tile_size[0]+50,(self.y+0.5)*tile_size[1]+50],    #middle left right[(self.x+1)*tile_size[0]+50,(self.y+0.5)*tile_size[1]+50],    #middle right] self.chess = Nonedef draw(self,color = (255,253,150),line_color = (150,175,255)): #x,y represents the tile coordinates  pg.draw.rect(screen,color,self.rectangle)pg.draw.line(screen,line_color,(self.points[0]),(self.points[1]),3)pg.draw.line(screen,line_color,(self.points[2]),(self.points[3]),3)if self.chess != None:screen.blit(chess[self.chess],((self.x+0.3)*tile_size[0] + 50, (self.y+0.3)*tile_size[1] + 50))pg.display.update()def draw_chessboard():screen.fill((255,255,255))for y in range(grid_size[1]):for x in range(grid_size[0]):matrix[y][x].draw()def get_clicked_tile():x_,y_ = pg.mouse.get_pos() #pixel coordinatesx = int((x_-50)/tile_size[0]) if int((x_-50)) >= 0 else -1y = int((y_-50)/tile_size[1]) if int((y_-50)) >= 0 else -1return x,ydef check_win(x,y):directions = [[(-1,0),(1,0)],[(0,-1),(0,1)],[(-1,1),(1,-1)],[(-1,-1),(1,1)]] #x,yfor line in directions:depth=0 for dx,dy in line:tempx = dxtempy = dyif x+dx in range(grid_size[0]) and y+dy in range(grid_size[1]):while matrix[y+dy][x+dx].chess == matrix[y][x].chess and depth <= 5:depth += 1if depth == 4:return matrix[y][x].chessdx += tempxdy += tempyif x+dx not in range(grid_size[0]) or y+dy not in range(grid_size[1]):breakdef display_score():global turnplayer1_won_text = font.render(f': {player_won[0]}', True, (0,0,0), (255,255,255))player2_won_text = font.render(f': {player_won[1]}', True, (0,0,0), (255,255,255))turn_text = font.render(f'Turns: {turn}                                      ', True, (0,0,0), (255,255,255))screen.blit(player1_won_text,(1000,120))screen.blit(player2_won_text,(1000,220))screen.blit(chess_scoreboard[0],(900,100))screen.blit(chess_scoreboard[1],(900,200))screen.blit(turn_text,(900,300))pg.display.update()def game_over_animation():for x in range(grid_size[0]+1):for y in range(grid_size[1]):if x +1 < grid_size[0]:matrix[y][x+1].chess = 2 if matrix[y][x+1].chess != None else Nonematrix[y][x+1].draw()if x < grid_size[0]:matrix[y][x].chess = 3matrix[y][x].draw()if x > 0:matrix[y][x-1].chess = Nonematrix[y][x-1].draw()time.sleep(0.05)#================================initialize parameter===================================
chess_color = [(0,0,0),(255,255,255)]
screen_size = [1200,800]
chess_size = [800,800]
grid_size = [15,15]
tile_size = [(chess_size[0]-100)/grid_size[0],(chess_size[1]-100)/grid_size[1]]run = True
game_ended = False
player_won = [0,0]
turn = 0
chess = [   pg.transform.smoothscale(pg.image.load('smiley.png'), (int(tile_size[0]/2),int(tile_size[0]/2))),   #player1pg.transform.smoothscale(pg.image.load('angry.png'), (int(tile_size[0]/2),int(tile_size[0]/2))),    #player2pg.transform.smoothscale(pg.image.load('sad.png'), (int(tile_size[0]/2),int(tile_size[0]/2))),    #sad facepg.transform.smoothscale(pg.image.load('fist.png'), (int(tile_size[0]/2),int(tile_size[0]/2)))]     #fist
chess_scoreboard = [   pg.transform.smoothscale(pg.image.load('smiley.png'), (80,80)),pg.transform.smoothscale(pg.image.load('angry.png'), (80,80)),]matrix = []
for y in range(grid_size[1]):temp = []for x in range(grid_size[0]):tile = Tile(grid_size,screen_size,x,y)temp.append(tile)matrix.append(temp)screen = pg.display.set_mode(screen_size)
pg.init()
#================================draw board==============================================
draw_chessboard()
font = pg.font.Font('freesansbold.ttf', 32)
display_score()
#================================game loop==============================================
while run:for event in pg.event.get():if event.type == pg.QUIT:run = Falsepg.quit()if event.type == pg.KEYDOWN:if event.key == pg.K_g:winner = (turn+1)%2print(f'player{(turn%2)+1} gave up')player_won[winner] += 1game_ended = Truedisplay_score()if event.type == pg.MOUSEBUTTONUP:if not game_ended:x,y = get_clicked_tile()if x in range(grid_size[0]) and y in range(grid_size[1]) and matrix[y][x].chess == None:matrix[y][x].chess = turn%2matrix[y][x].draw()winner = check_win(x,y)turn += 1if winner != None:print(f'the winner is: player{winner+1}')player_won[winner] += 1game_ended = Truedisplay_score()else:game_over_animation()game_ended = Falseturn = 0display_score()for y in range(grid_size[1]):for x in range(grid_size[0]):matrix[y][x].chess = Nonematrix[y][x].draw()time.sleep(1/30)

Pygame 整活五子棋相关推荐

  1. 笑不活了!院士带领课题组硕博“整活”,科研版「苦行僧」火出圈!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文募格学术整理.参考资料:中国科学报.澎湃新闻.王晓东课题组视频等 ...

  2. 炉石整活拔线方法_炉石传说:采访仰天莫笑——黄金总决赛再度捧杯后的变化与成长...

    在前不久结束的黄金总决赛酒馆战棋组的比赛中,象征着冠军的金炉石和金钥匙由首届黄金公开赛棋王仰天莫笑捧起. 这位在上海站首度夺冠的选手又一次在上海证明了自己,而在之前的采访中他提到自己几乎不会整活,甚至 ...

  3. 整活插件 炉石传说_炉石传说:一顿操作猛如虎,定睛一看原地杵,会长整活被死人抬走...

    玩游戏找热点,点击关注不迷路 在酒馆战棋中,要说当下最强的一套吃鸡体系,那肯定是整活流了.这套体系也是玩家们经过了长久的摸索逐渐形成了一套完整的流派.这套流派的最大优势就是一旦整活成功,可以说吃鸡相当 ...

  4. 稚晖君又整活啦!基于全志F1C200s的超迷你

    转自全志在线 B站最强小电视(基于全志H3) 钢铁侠机械臂 曾经靠着"B站最强小电视"以及号称"钢铁侠机械臂"等硬核产品出圈的稚晖君又双叒叕来整活啦! 稚晖君B ...

  5. 整活插件 炉石传说_酒馆战旗整活插件 免安装版

    炉石传说酒馆战旗整活插件是一款专门用来帮助玩家跳过炉石传说战斗动画的工具.炉石传说中的战旗模式会在匹配成功后播放一段战斗动画,等到动画播放完毕才会正式进入选牌阶段开始游戏,而很多经常玩战旗模式的玩家早 ...

  6. 炉石整活拔线方法_酒馆战棋:整活如何简单“拔线”?瓦娘在线教学,却3本得死神?...

    大家好!我是炉石闲说,为您分享炉石魔兽趣闻趣事! 在酒馆战棋中,在目前游戏规则允许的条件下,整活作为一个对网络速度.电脑配置尤其是对玩家手速和大局观要求比较高的技术,整活通常在逆境中能帮你逆转局势,顺 ...

  7. OpenVINO整活(一) 输入分辨率

    OpenVINO整活(一) 输入分辨率 OpenVINO分为转换与部署两个部分,如下图所示 在转换步中,需要将输入模型序列化后传入OpenVINO的MOModel Optimizer工具对模型进行优化 ...

  8. 【工程师整活】Ai-WB1-A1S实现离线语音+APP+天猫精灵控制风扇

    文章目录 前言 一.控制主板 二.转接板原理图 三.接线与烧录 1.转接板接线 2.固件烧录 四.离线语音功能 五.App 控制功能 1.云平台产品创建 2.添加设备 3.五元组烧录 4.进入配网 4 ...

  9. STM32关于使用定时器来实现串口通信的整活实验

    目录 一.整活说明 二.原理简介 先说接收 发送数据 优化 三.实验条件和目标 条件 目标 四.掉头发环节 1.定义串口类 2.定义简单宏 3.定义私有数据 4.init 函数 5.其他接口函数 6. ...

最新文章

  1. Linux中新建用户用不了sudo命令问题:rootr is not in the sudoers file.This incident will be reported解决
  2. 小型企业的上网行为管理方案
  3. ECJTUACM16 Winter vacation training #5 题解源码
  4. NYOJ 35 表达式求值
  5. 部署LVS-DR(LVS+Keepalived)群集
  6. 网络安全:HTTP Host 头攻击相关知识介绍
  7. 下午去银行办理按揭手续,不得已调休半天
  8. 汉诺塔java程序_Java编写一个汉诺塔的过程
  9. 凯利公式自动计算表_EXCEL——可自动计算的收支表,全函数计算,拿上就用!
  10. python高级-闭包-装饰器
  11. mysql数据库查询要注意事项_三种mysql高级查询技巧_数据库_mysql函数_课课家
  12. debian开机打开浏览器_使自動起動! 我学到了!原来“文件”可以跟“应用程序”一样,都能设置开机自启!!...
  13. 朋友让帮忙写个理发店的会员信息管理系统...
  14. Leet_Code_1
  15. python入门(三)列表、元组、range()、字典
  16. 苹果试玩换个新id行不_关于更换苹果ID的事
  17. VUE 前端中如何进行组件化开发?
  18. 怎么实现全国IP自动更换?
  19. 【学术篇】不知道该起啥标题了怎么办OvO
  20. python学习——绘制loss、acc学习曲线

热门文章

  1. 光纤传感器实验模块_飞秒激光制备异质光纤光栅的温度应变双参数传感器
  2. eclipse里的无参构造_构造方法及其作用
  3. mysql suoyin 和锁_Mysql索引与锁
  4. *PAT_B_1014_Java(20分)
  5. 着墨中文lisp登入_Lisp的本质 - climbdream的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. python性能分析工具_Python Profilers 分析器
  7. java中检测数据波动_在pyspark数据帧中检测异常值
  8. rono在oracle的作用_oracle中rownum作用及用法
  9. rds数据加密_如何保障云上数据安全?一文详解云原生全链路加密
  10. CF--思维练习--CodeForces - 216C - Hiring Staff (思维+模拟)