no.1
项目:
2048小游戏
游戏规则:
2048游戏共有16个格子,初始时初始数字由2或者4构成。
1、手指向一个方向滑动,所有格子会向那个方向运动。
2、相同数字的两个格子,相撞时数字会相加。
3、每次滑动时,空白处会随机刷新出一个数字的格子。
4、当界面不可运动时(当界面全部度被数字填满时),游戏结束;当界面中最大数字是2048时,游戏胜利。
开发思路分解:由于项目较小,先用简单函数
1.游戏类2048棋盘,棋盘可wasd移动
2.移动时间内生成至少2个数字2或者4,并将相邻相同数字相加
需要数据:2种
1.输入指令识别
2.棋盘列表
函数功能:10个
1.生成新棋盘1个
2.方向移动4个,加转置棋盘1个
3.判断生成新数字还是游戏结束1个
4.打印棋盘函数1个
5.主函数一个
源码:game_2048_no.1
import random
list_2048=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
def get_new():
for i in range(16):
list_2048[i]=0
generate_number()
def generate_number():
count=2
zero=0
zero_list=[]
for i in range(16):
if list_2048[i]==0:
zero+=1
zero_list.append(i)
if zero==0:
pass
else:
x=random.randint(0,zero-1)
y=random.randint(0,zero-1)
# print(x,y)
# print(zero_list)
list_2048[zero_list[x]]=list_2048[zero_list[y]]=2
def move_left():
for i in range(15,-1,-1):
if list_2048[i]==0:
list_2048.insert(4+4*(i//4),0)
del list_2048[i]
for i in range(4):
for x in range(3):
if list_2048[i*4+x]==list_2048[i*4+x+1]:
temp=list_2048[i*4+x]*2
list_2048[i*4+x]=temp
list_2048[i*4+x+1]=0
for i in range(15,-1,-1):
if list_2048[i]==0:
list_2048.insert(4+4*(i//4),0)
del list_2048[i]
# generate_number()
def print_2048():
for i in range(4):
print(list_2048[(i*4):(i*4+4)])
def turn_list():
list_2048[0],list_2048[3],list_2048[12],list_2048[15]=list_2048[12],list_2048[0],list_2048[15],list_2048[3]
list_2048[5],list_2048[6],list_2048[9],list_2048[10]=list_2048[9],list_2048[5],list_2048[10],list_2048[6]
list_2048[1],list_2048[7],list_2048[14],list_2048[8]=list_2048[8],list_2048[1],list_2048[7],list_2048[14]
list_2048[4],list_2048[2],list_2048[11],list_2048[13]=list_2048[13],list_2048[4],list_2048[2],list_2048[11]
def move_right():
turn_list()
turn_list()
move_left()
turn_list()
turn_list()
def move_down():
turn_list()
move_left()
turn_list()
turn_list()
turn_list()
def move_up():
turn_list()
turn_list()
turn_list()
move_left()
turn_list()
get_new()
while True:
# print("欢迎参加2048小游戏试玩")
print_2048()
direct=input("请输入移动方向:")
if direct=="w":
move_up()
generate_number()
elif direct=="s":
move_down()
generate_number()
elif direct=="a":
move_left()
generate_number()
elif direct=="d":
move_right()
generate_number()
改进:
1.代码简化,
2.界面优化
3.算法简化
4.可读性差
no.2
1.入口简化,可模块化
2.功能增强,界面优化
import random
list_2048=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
win_sign=4
def get_new():
for i in range(16):
list_2048[i]=0
generate_number()
def generate_number():
zero=0
global sign
sign=0
zero_list=[]
for i in range(16):
if list_2048[i]==0:
zero+=1
zero_list.append(i)
elif list_2048[i]==win_sign:
sign=2
if zero==0:
sign=1
else:
x=random.randint(0,zero-1)
y=random.randint(0,zero-1)
list_2048[zero_list[x]]=list_2048[zero_list[y]]=2
def print_2048():
print("*"*10+"2048小游戏"+"*"*10)
print("w:向上移动","s:向下移动","a:向左移动","d:向右移动")
for x in range(4):
print()
for y in range(4):
print(list_2048[x*4+y],end="\t")
def move_left():
for i in range(15,-1,-1):
if list_2048[i]==0:
list_2048.insert(4+4*(i//4),0)
del list_2048[i]
for i in range(4):
for x in range(3):
if list_2048[i*4+x]==list_2048[i*4+x+1]:
temp=list_2048[i*4+x]*2
list_2048[i*4+x]=temp
list_2048[i*4+x+1]=0
for i in range(15,-1,-1):
if list_2048[i]==0:
list_2048.insert(4+4*(i//4),0)
del list_2048[i]
def turn_list():
list_2048[0],list_2048[3],list_2048[12],list_2048[15]=list_2048[12],list_2048[0],list_2048[15],list_2048[3]
list_2048[5],list_2048[6],list_2048[9],list_2048[10]=list_2048[9],list_2048[5],list_2048[10],list_2048[6]
list_2048[1],list_2048[7],list_2048[14],list_2048[8]=list_2048[8],list_2048[1],list_2048[7],list_2048[14]
list_2048[4],list_2048[2],list_2048[11],list_2048[13]=list_2048[13],list_2048[4],list_2048[2],list_2048[11]
def move_right():
turn_list()
turn_list()
move_left()
turn_list()
turn_list()
def move_down():
turn_list()
move_left()
turn_list()
turn_list()
turn_list()
def move_up():
turn_list()
turn_list()
turn_list()
move_left()
turn_list()
def main():
get_new()
print("欢迎参加2048小游戏试玩")
while True:
print_2048()
if sign == 1:
print("游戏失败")
break
elif sign == 2:
print("游戏胜利")
break
direct=input("\n请输入移动方向:")
if direct=="w":
move_up()
generate_number()
elif direct=="s":
move_down()
generate_number()
elif direct=="a":
move_left()
generate_number()
elif direct=="d":
move_right()
generate_number()
main()
no.3
1.项目化
2.面向对象编程
3.增加注释
"""
2048游戏核心代码区
"""
import random
# 游戏胜利标号
win_sign = 4
# 游戏棋盘控制
class Game_2048:
# 参数设置
def __init__(self):
self.list_2048 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
self.sign = 0
# 重建游戏
def get_new(self):
for i in range(16):
self.list_2048[i] = 0
self.__generate_number()
# 打印2048
def print_2048(self):
print("*" * 10 + "2048小游戏" + "*" * 10)
print("w:向上移动", "s:向下移动", "a:向左移动", "d:向右移动")
print("n:重新开局")
for x in range(4):
print()
for y in range(4):
print(self.list_2048[x * 4 + y], end="\t")
# 生成数字
def __generate_number(self):
zero = 0
zero_list = []
for i in range(16):
if self.list_2048[i] == 0:
zero += 1
zero_list.append(i)
elif self.list_2048[i] == win_sign:
self.sign = 2
if zero == 0:
self.sign = 1
else:
x = random.randint(0, zero - 1)
y = random.randint(0, zero - 1)
self.list_2048[zero_list[x]] = self.list_2048[zero_list[y]] = 2
# 转置矩阵
def __turn_list(self):
self.list_2048[0], self.list_2048[3], self.list_2048[12], self.list_2048[15] = self.list_2048[12], \
self.list_2048[0], \
self.list_2048[15], \
self.list_2048[3]
self.list_2048[5], self.list_2048[6], self.list_2048[9], self.list_2048[10] = self.list_2048[9], self.list_2048[
5], self.list_2048[10], self.list_2048[
6]
self.list_2048[1], self.list_2048[7], self.list_2048[14], self.list_2048[8] = self.list_2048[8], self.list_2048[
1], self.list_2048[7], self.list_2048[
14]
self.list_2048[4], self.list_2048[2], self.list_2048[11], self.list_2048[13] = self.list_2048[13], \
self.list_2048[4], \
self.list_2048[2], \
self.list_2048[
11]
# 方向移动
def move_left(self):
for i in range(15, -1, -1):
if self.list_2048[i] == 0:
self.list_2048.insert(4 + 4 * (i // 4), 0)
del self.list_2048[i]
for i in range(4):
for x in range(3):
if self.list_2048[i * 4 + x] == self.list_2048[i * 4 + x + 1]:
temp = self.list_2048[i * 4 + x] * 2
self.list_2048[i * 4 + x] = temp
self.list_2048[i * 4 + x + 1] = 0
for i in range(15, -1, -1):
if self.list_2048[i] == 0:
self.list_2048.insert(4 + 4 * (i // 4), 0)
del self.list_2048[i]
self.__generate_number()
def move_right(self):
self.__turn_list()
self.__turn_list()
self.move_left()
self.__turn_list()
self.__turn_list()
def move_down(self):
self.__turn_list()
self.move_left()
self.__turn_list()
self.__turn_list()
self.__turn_list()
def move_up(self):
self.__turn_list()
self.__turn_list()
self.__turn_list()
self.move_left()
self.__turn_list()
# 游戏界面控制
def main():
game = Game_2048()
print("欢迎参加2048小游戏试玩")
while True:
game.print_2048()
if game.sign == 1:
print("游戏失败")
break
elif game.sign == 2:
print("游戏胜利")
break
direct = input("\n请输入移动方向:")
if direct == "w":
game.move_up()
elif direct == "s":
game.move_down()
elif direct == "a":
game.move_left()
elif direct == "d":
game.move_right()
elif direct =="n":
game.get_new()
# os.system("clear")
"""
游戏入口
"""
from code2048 import *
if __name__ == '__main__':
main()
总结
基本达成目标,游戏界面可以也用面向对象编程,而且可以GUI和exe做成小游戏的形式
网友评论