课后作业-团队编程项目总结
项目名称:井字棋游戏
小组成员:宋沅修,周天翼,朱中浩,王金鑫,张浩,鲍伟
项目托管地址:https://gitee.com/zhanghao0225/JingZiQi/tree/master
项目说明:井字游戏的游戏界面是一个3*3的格子,系统提示玩家点击棋盘的坐标来表示要下的棋子的位置,如果玩家输入的坐标所在位置已经有棋子或者该坐标已经超出了游戏坐标的范围,就提示玩家重新输入坐标,。当有三个棋子在一条直线上的时候就结束游戏,并输出哪个玩家赢了。
使用说明:玩家1和玩家2各自输入自己的棋子坐标,来表示棋子的位置。如果某个玩家有三个棋子连成一条直线,则该玩家胜利,游戏结束。
项目不足之处:游戏界面太单一,输出的棋盘太小等等。
项目代码:
# -*- coding: cp936 -*-
#1-导入库
import pygame
from random import randint
#tkMessageBox 用来弹出对话框
import tkMessageBox
from pygame.locals import *
#2-初始化游戏
pygame.init()
width,height=480,480
#显示 样式 创建屏幕保存到变量中
screen=pygame.display.set_mode((width,height))
#标题
pygame.display.set_caption("jingziqi")
#插入图片
background=pygame.image.load("bjt.png")
#定义
empty = 0
black=(0,0,0)
red=(255,0,0)
blue=(0,0,255)
white=(255,255,255)
#创建绘制棋盘的函数
def draw_game():
#导入背景图
screen.blit(background,(0,0))
#画线
#用法:pygame.draw.line(显示,颜色,开始位置,结束位置,宽度)
pygame.draw.line(screen, black, (160, 0), (160, 480), 5)
pygame.draw.line(screen, black, (320, 0), (320, 480), 5)
pygame.draw.line(screen, black, (0, 160), (480, 160), 5)
pygame.draw.line(screen, black, (0, 320), (480, 320), 5)
#遍历列表中的元素及他们的下标 row横col竖 row col是下标
for row, line in enumerate(state):
for col, val in enumerate(line):
if val == -1:
#画x
upper_left = (col * 160 + 5, row * 160 + 5)
lower_right = (col * 160 + 155, row * 160 + 155)
pygame.draw.line(screen, red, upper_left, lower_right, 5)
upper_right = (col * 160 + 155, row * 160 + 5)
lower_left = (col * 160 + 5, row * 160 + 155)
pygame.draw.line(screen, red, upper_right, lower_left, 5)
elif val == 1:
#创建一个矩形.在矩形里画圆
rect = (col * 160 + 5, row * 160 + 5, 150, 150)
pygame.draw.ellipse(screen, blue, rect, 5)
else:
assert val == empty
continue
pygame.display.flip()
def draw_O():
#随机函数
while True:
row = randint(0,2)
col = randint(0,2)
#当空格为空的时候画圆
if state[row][col] == 0:
state[row][col] = 1
break
draw_game()
pygame.display.flip()
def is_won():
for val in range(3):
# 检查匹配的行三个图形是否都相同且不等于空
if state[0][val] == state[1][val] == state[2][val] != empty:
return state[0][val]
# 检查匹配的列三个图形是否都相同不等于空
if state[val][0] == state[val][1] == state[val][2] != empty:
return state[val][0]
#判断 \ 中三个图形是否都相同
if state[0][0] == state[1][1] == state[2][2] != empty:
return state[1][1]
#判断 / 中三个图形是否都相同
if state[0][2] == state[1][1] == state[2][0] != empty:
return state[1][1]
#初始化棋盘
def begin():
global state
state = [[empty] * 3,[empty] * 3,[empty] * 3]
draw_game()
#首先初始化 pygame.display.flip()
begin()
#主循环
while True:
event=pygame.event.wait()
#初始化
pos = None
temp = 0
#接收到退出事件后退出程序
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
#加入了按键功能
elif event.type == KEYDOWN:
if event.key == K_a:
begin()
draw_game()
pygame.display.flip()
elif event.key == K_s:
pygame.event.post(pygame.event.Event(QUIT))
#接受鼠标点击事件
elif event.type == MOUSEBUTTONDOWN and event.button == 1:
#event.pos[0]代表x轴坐标 event.pos[1]代表y轴坐标
pos = (event.pos[1]/160, event.pos[0]/160)
row,col=pos
#if pygame.mouse.get_rel()==(0,0):
# continue
#加一个条件让它只能在空的时候画x
if state[row][col]==0:
state[row][col] = -1
else:
continue
print pos
draw_game()
draw_O()
#判断属性接受返回值
if is_won() == -1:
tkMessageBox.showinfo(title='win',message='win')
pygame.quit()
exit(0)
elif is_won() == 1:
tkMessageBox.showinfo(title='lose',message='lose')
pygame.quit()
exit(0)
项目图示:
项目总结:通过这次团队合作编写井字棋项目,我们小组通过运用所学的知识成功编写出了井字棋项目,并且成功运行,让我们编写程序的能力得到了提升。不过我们虽然分工明确,但各个部分的代码还是有一些麻烦和差错需要解决,有的问题我们不太容易解决,在解决这些问题之中,我们也得到了许多受益匪浅的知识,使我们以后编写代码会更加游刃有余。