python实现2048游戏项目

 

目录 

一.源代码

二.知识记录

2.1 解包的知识

2.2 Python“主函数”标志: if __name__ == "__main__"

2.3 pytcharm 快捷键

2.4.Python3 range()函数

2.5 退出程序

2.6 传入表格的每一行,“解包”,

2.7 Python缩进格式很严格 

2.8 关于空和空格

三.算法/逻辑

3.1 减少重复,边查找就边正好把查找的空位的位置传入白板中 

3.2 填补一个随机数逻辑

3.3 存放空位坐标的表格的应用

3.4 关于左移操作的函数

3.5 矩阵旋转,关于将左移操作用于下,上,右移

3.6 [2,2,2]=>[4,2] 前后元素比较的算法

四.疑问

4.1 函数 return

4.2 循环 break

五.总结

5.1学习路线

5.2反思

六.拓展

6.1.notepad 快捷键

6.2 写代码一个危险例子


 

一.源代码

#打印棋盘
import random 

class Game():
    def __init__(self):
        self.score = 0
        self.list = [
            ['','','',''],
            ['','','',''],
            ['','','',''],
            ['','','','']
        ]
        #白板 存储坐标
        self.whiteBoard = []
    def restart(self):
        self.list = [
            ['','','',''],
            ['','','',''],
            ['','','',''],
            ['','','','']
        ]
        while True:
            t1 = [random.randrange(len(self.list)),random.randrange(len(self.list[0]))]
            t2 = [random.randrange(len(self.list)),random.randrange(len(self.list[0]))]
            if t1!= t2:
                break
        self.list[t1[0]][t1[1]] = random.randrange(2, 5, 2)
        self.list[t2[0]][t2[1]] = random.randrange(2, 5, 2)
        self.print_board()
  
                    
    def print_board(self):
        print("""
score:{}
+-----+-----+-----+-----+
|{:^5}+{:^5}+{:^5}+{:^5}+
+-----+-----+-----+-----+
|{:^5}+{:^5}+{:^5}+{:^5}+
+-----+-----+-----+-----+
|{:^5}+{:^5}+{:^5}+{:^5}+
+-----+-----+-----+-----+
|{:^5}+{:^5}+{:^5}+{:^5}+
+-----+-----+-----+-----+
w(up), s(down), a(left), d(right)
q(quit), r(restart)
""".format(self.score, *self.list[0],
                       *self.list[1],
                       *self.list[2],
                       *self.list[3]))
                       
    #判断输/赢/继续游戏
    def state(self):
        flag = 2
        for x in range(len(self.list)):
            for y in range(len(self.list[x])):
                if self.list[x][y] == 2048:
                    flag = 1 #win
                    break
                
                if self.list[x][y] == "":
                    self.whiteBoard.append([x,y])
                    flag = 0 #continue 
        
        return flag
        
    def left(self):
        #删除空格(2, ,2, )=>(2,2, , )(4, , , )
        #传入表格每一行 [2," ",2," "]
        for i in range(len(self.list)):
            temp=[]
            new_row=[]
            #遍历这行的每个元素,并把非空值传出
            for item in self.list[i]:
                if item:
                    temp.append(item)

            #得到一个temp[2,2]
            if len(temp) <1:
                continue
            
            elif len(temp) <2:
                new_row.append(temp[0])
                
            else:
                Flag = True
                for j in range(len(temp)):
                    if Flag:
                        if j+1<len(temp) and temp[j] == temp[j+1]:
                            new_row.append(temp[j]*2)
                            Flag = False
                        else:
                            new_row.append(temp[j])
                    else:
                        Flag = True        
                #得到new_row [4]
            y = len(self.list)-(len(new_row))
            #填补空格
            for x in range(y):
                new_row.append("")
            #传入表格当前行 [2," ",2," "]=>[4," "," "," "]
            self.list[i] = new_row
        
    def turn_right(self):
        self.list = [list(x[::-1])for x in zip(*self.list)]       
     
    def turn_left(self):
        for i in range(3):
            self.turn_right()  
   
        
    # 随机填补一个随机数    
    def add_randNumber(self):
        p = self.whiteBoard.pop(random.randrange(len(self.whiteBoard)))
        #再随机值
        self.list[p[0]][p[1]] = random.randrange(2, 5, 2)   
        
        self.print_board()       
    
    #开始游戏 
    def start_game(self):
    
        self.restart()
        
        #开始游戏,输入指令
        while True:
            code = input("请输入指令>>>:")
            #向上?
            if code == "w":
                self.turn_left()
                self.left()
                self.turn_right()
                
            #向下? 
            elif code == "s":
                self.turn_right()
                self.left()
                self.turn_left()
              
            #向左? 
            elif code == "a":
                self.left()
                
                
            #向右?     
            elif code == "d":
                self.turn_left()
                self.turn_left()
                self.left()
                self.turn_right()
                self.turn_right()
            
            
            #退出
            elif code == "q":
                exit("退出")
            
            #重启        
            elif code == "r":  
                self.restart()
                
            #输入有误
       
  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值