实验二 结对编程(第二阶段)
一、实验目标
1)体验敏捷开发中的两人合作。
2)进一步提高个人编程技巧与实践。
二 、实验内容
1)根据以下问题描述,练习结对编程(pair programming)实践;
2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。
3)要求在结对编程工作期间,两人的角色至少切换 4 次;
4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。
三、实验过程
1、经过与队友的沟通商量我们决定采用屏幕分享来完成本次结对编程实验。
2、代码选择:经过双方共同商量,选择使用python来完成本次实验。
3、python代码规范:
在编写代码的时候,两人经过四次角色转换,有时候会在QQ上讨论很久,关于一个问题怎么去解决。然后一起去搜索查找,解决问题。
4、我们可以用一个二维矩阵来表示这样一个世界。用1表示这个细胞的状态是活着,0表示这个细胞的状态是死了。下面就是我们的初始化代码:
ground=np.zeros([x_rect,y_rect])#整条蛇占据的矩阵,0是没有。
for i in range(1,x_rect-1):
for j in range(1,y_rect-1):
if randint(1,10)<2:
ground[i][j]=1
else:
pass
所以建立一个零矩阵。然后通过两个for循环,按照一定的比例将矩阵里面部分0变成1.用到了randint函数。
然后,我们正式进入游戏的运行部分。
while True:
for i in range(1,x_rect-1):#所有细胞的生存状态发展
for j in range(1,y_rect-1):
if ground[i][j]==1:
if food_num(i,j)!=2 and food_num(i,j)!=3:
ground[i][j]=0
else:
pass
else:
if food_num(i,j)==3:
ground[i][j]=1
else:
pass
在while True中,我们判断在这一个回合中,哪一些细胞死了,哪一些细胞活了,哪一些细胞保持原样。细胞是死是活的状态由矩阵里面的0和1存储。里面判断的标准就是生命游戏的规则。
最后就是把这个打印出来。
5、运行截图
6、上传仓库
仓库地址:https://github.com/cyszz/my-travel-plans.git
7、实验源码
import pygame
import sys
from pygame.locals import*
import numpy as np
from random import randint
pygame.init()
rect_width=10
size=width,height=800,500
COLOR=(100,67,3)#蛇的颜色
x_rect=int(width/rect_width)
y_rect=int(height/rect_width)#长宽格子有多个
bg=(100,180,180)
screen=pygame.display.set_mode(size)
pygame.display.set_caption("python趣味爱好者")
ground=np.zeros([x_rect,y_rect])#整条蛇占据的矩阵,0是没有。
for i in range(1,x_rect-1):
for j in range(1,y_rect-1):
if randint(1,10)<2:
ground[i][j]=1
else:
pass
def get_rect(row,column):#计算应该在哪里画方格,以右上角为点。
x1=rect_width*row
y1=rect_width*column
return (x1,y1,rect_width,rect_width)
#pygame.draw.rect(screen,COLOR,get_rect(row,column),0)
def food_num(x,y):#为了避免出现ground[-1][-1]的情况,我们需要从1开始
num=0
neighbour=[ground[x][y-1],ground[x][y+1],ground[x-1][y],ground[x+1][y]\
,ground[x-1][y-1],ground[x+1][y-1],ground[x-1][y+1],ground[x+1][y+1]]
return sum(neighbour)
def draw_food(x,y):
pygame.draw.rect(screen,COLOR,get_rect(x,y),0)
while True:
for i in range(1,x_rect-1):#所有细胞的生存状态发展
for j in range(1,y_rect-1):
if ground[i][j]==1:
if food_num(i,j)!=2 and food_num(i,j)!=3:
ground[i][j]=0
else:
pass
else:
if food_num(i,j)==3:
ground[i][j]=1
else:
pass
#下面是画出所有的细胞
screen.fill(bg)#填充背景颜色
for i in range(1,x_rect-1):#所有细胞的生存状态发展
for j in range(1,y_rect-1):
if ground[i][j]==1:
draw_food(i,j)
else:
pass
pygame.display.flip()
pygame.time.delay(80)
6、实验总结
通过这次的结对编程实验,让我对GitHub的操作更加熟悉了。通过与我的队友一起合作,分享经验,交流遇到的困难,这些也在一定程度上提高了自己的综合编程能力。其次,我们小队选择了生命游戏为课题,在确定用什么样的结构,什么样的算法,什么样的函数等,都需要两人共同交流完成,虽然过程较为繁琐,但程序的准确性提高了。而且一些容易犯的编写错误,经过两个人的检查,也更容易被发现和指出,代码结构更加清晰,出现bug的几率也更小了,提高了小队的编程效率。在这次结对编程中我学到了很多经验。