2048小遊戲Python3.6.5實現
這個2048遊戲是我自學python以後寫的, 用了幾天時間。
其中的某些方法可能寫的很笨, 也可能還存在各種BUG, 歡迎各位評論指出。
下面貼出完整程式碼供大家學習交流。
import random #遊戲分數 gameScore = 0 #遊戲矩陣 matrix = [] #初始化遊戲矩陣 def init_matrix(): global matrix matrix = [[0 for i in range(4)] for i in range(4)] #判斷列印數字或空格 def init_gameNum(num): return num if num != 0 else ' ' #列印遊戲介面 def print_game(): print("當前分數:", gameScore) print(""" ┌─────┬─────┬─────┬─────┐ │%4s │%4s │%4s │%4s │ ├─────┬─────┬─────┬─────┤ │%4s │%4s │%4s │%4s │ ├─────┬─────┬─────┬─────┤ │%4s │%4s │%4s │%4s │ ├─────┬─────┬─────┬─────┤ │%4s │%4s │%4s │%4s │ └─────┴─────┴─────┴─────┘""" %(init_gameNum(matrix[0][0]), init_gameNum(matrix[0][1]), init_gameNum(matrix[0][2]), init_gameNum(matrix[0][3]), \ init_gameNum(matrix[1][0]), init_gameNum(matrix[1][1]), init_gameNum(matrix[1][2]), init_gameNum(matrix[1][3]), \ init_gameNum(matrix[2][0]), init_gameNum(matrix[2][1]), init_gameNum(matrix[2][2]), init_gameNum(matrix[2][3]), \ init_gameNum(matrix[3][0]), init_gameNum(matrix[3][1]), init_gameNum(matrix[3][2]), init_gameNum(matrix[3][3])) ) #隨機產生2 or 4, time代表產生數字的個數 def getNum2oR4(time = 1): global matrix numSum = 0 while True: num = 2 if random.randrange(0, 20) >= 1 else 4 #2:4 的產生概率為 20:1 index = divmod(random.randrange(0, 16), 4)#divmod()函式把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b)。 if matrix[index[0]][index[1]] == 0: matrix[index[0]][index[1]] = num numSum += 1 if numSum == time: break #檢查遊戲是否GG def check_GG(): for i in range(0, 4): for j in range(0, 3): if matrix[i][j] == 0 or matrix[i][j + 1] == 0 or matrix[i][j] == matrix[i][j + 1] or matrix[j][i] == matrix[j + 1][i]: return True else: return False #檢查是否可以上移, 若每個非零數字上側均無0 或者 每個非零數字上側均無相等數字 則該次上移無效 def check_move_up(): for j in range(0, 4): for i in range(1, 4): if (matrix[i][j] != 0 and matrix[i - 1][j] == 0) or (matrix[i][j] != 0 and matrix[i][j] == matrix[i - 1][j]): return True print("當前不可上移!") return False #左移 def move_up(): if check_move_up(): global gameScore #迴圈列 for column in range(0, 4): #合併本列相同數字, 並計算分數 for i in range(0, 3): for j in range(i + 1, 4): if matrix[j][column] != 0 and matrix[j][column] != matrix[i][column]: # 避免隔數合併 break if matrix[j][column] != 0 and matrix[j][column] == matrix[i][column]: matrix[i][column] = matrix[i][column] * 2 matrix[j][column] = 0 gameScore += matrix[i][column] # 如果出現 2048 則遊戲結束, 並給出本局得分 if matrix[i][column] == 2048: print("您贏了!\n本局得分為:", gameScore) exit() break # 消除本列空位 for j in range(0, 4): #定義臨時列表, 儲存 j 列非零值, 下標用 k 表示 temp_matrix = [0, 0, 0, 0] k = 0 for i in range(0, 4): if matrix[i][j] != 0: temp_matrix[k] = matrix[i][j] k += 1 for i in range (0, 4): matrix[i][j] = temp_matrix[i] getNum2oR4() else: pass #檢查是否可以下移, 若每個非零數字下側均無0 或者 每個非零數字下側均無相等數字 則該次下移無效 def check_move_down(): for j in range(0, 4): for i in range(2, -1, -1): if (matrix[i][j] != 0 and matrix[i + 1][j] == 0) or (matrix[i][j] != 0 and matrix[i][j] == matrix[i + 1][j]): return True print("當前不可下移!") return False #左移 def move_down(): if check_move_down(): global gameScore #迴圈列 for column in range(0, 4): #合併本列相同數字, 並計算分數 for i in range(3, 0, -1): for j in range(i - 1, -1, -1): if matrix[j][column] != 0 and matrix[j][column] != matrix[i][column]: # 避免隔數合併 break if matrix[j][column] != 0 and matrix[j][column] == matrix[i][column]: matrix[i][column] = matrix[i][column] * 2 matrix[j][column] = 0 gameScore += matrix[i][column] # 如果出現 2048 則遊戲結束, 並給出本局得分 if matrix[j][column] == 2048: print("您贏了!\n本局得分為:", gameScore) exit() break # 消除本列空位 for j in range(0, 4): #定義臨時列表, 儲存 j 列非零值, 下標用 k 表示 temp_matrix = [0, 0, 0, 0] k = 3 for i in range(3, -1, -1): if matrix[i][j] != 0: temp_matrix[k] = matrix[i][j] k += -1 for i in range (3, -1, -1): matrix[i][j] = temp_matrix[i] getNum2oR4() else: pass #檢查是否可以左移, 若每個非零數字左側均無0 或者 每個非零數字左側沒有相等數字 則該次左移無效 def check_move_left(): for i in range(0, 4): for j in range(1, 4): if (matrix[i][j] != 0 and matrix[i][j - 1] == 0) or (matrix[i][j] != 0 and matrix[i][j] == matrix[i][j - 1]): return True print("當前不可左移!") return False #左移 def move_left(): if check_move_left(): global gameScore #迴圈行 for row in range(0, 4): # 合併本行相同數字, 並計算分數 for i in range(0, 3): for j in range(i + 1, 4): if matrix[row][j] != 0 and matrix[row][j] != matrix[row][i]: # 避免隔數合併 eg:0242 (left)-> 0440 break if matrix[row][j] != 0 and matrix[row][j] == matrix[row][i]: matrix[row][i] = matrix[row][i] * 2 matrix[row][j] = 0 gameScore += matrix[row][i] # 如果出現 2048 則遊戲結束, 並給出本局得分 if matrix[row][i] == 2048: print("您贏了!\n本局得分為:", gameScore) exit() break # 消除本行空位 for i in range(0, 4): #定義臨時列表, 儲存 i 行非零值, 下標用 k 表示 temp_matrix = [0, 0, 0, 0] k = 0 for j in range(0, 4): if matrix[i][j] != 0: temp_matrix[k] = matrix[i][j] k += 1 for j in range (0, 4): matrix[i][j] = temp_matrix[j] getNum2oR4() else: pass #檢查是否可以右移, 若每個非零數字右側均無0 或者 每個非零數字右側均無相等數字 則該次右移無效 def check_move_right(): for i in range(0, 4): for j in range(2, -1, -1): if (matrix[i][j] != 0 and matrix[i][j + 1] == 0) or (matrix[i][j] != 0 and matrix[i][j] == matrix[i][j + 1]): return True print("當前不可右移!") return False #右移 def move_right(): if check_move_right(): global gameScore #迴圈行 for row in range(0, 4): # 合併本行相同數字, 並計算分數 for i in range(3, 0, -1): for j in range(i - 1, -1, -1): if matrix[row][j] != 0 and matrix[row][j] != matrix[row][i]: # 避免隔數合併 break if matrix[row][j] != 0 and matrix[row][j] == matrix[row][i]: matrix[row][i] = matrix[row][i] * 2 matrix[row][j] = 0 gameScore += matrix[row][i] # 如果出現 2048 則遊戲結束, 並給出本局得分 if matrix[row][i] == 2048: print("您贏了!\n本局得分為:", gameScore) exit() break # 消除本行空位 for i in range(3, -1, -1): #定義臨時列表, 儲存 i 行非零值, 下標用 k 表示 temp_matrix = [0, 0, 0, 0] k = 3 for j in range(3, -1, -1): if matrix[i][j] != 0: temp_matrix[k] = matrix[i][j] k += -1 for j in range (3, -1, -1): matrix[i][j] = temp_matrix[j] getNum2oR4() else: pass #遊戲主函式 def main(): global gameScore init_matrix() getNum2oR4(2) print_game() direction = input("(↑:w) (↓:s) (←:a) (→:d) (restart:r)") #開始遊戲迴圈,只有GG才會停止遊戲 while True: #上移 if direction == 'w': move_up() #下移 elif direction == 's': move_down() #左移 elif direction == 'a': move_left() #右移 elif direction == 'd': move_right() #重新開始 elif direction == 'r': init_matrix() getNum2oR4(2) gameScore = 0 #其他輸入 else: print("輸入無效!") print_game() if not check_GG(): print("Game Over\nScore : ", gameScore) break direction = input("(↑:w) (↓:s) (←:a) (→:d) (restart:r)") if __name__ == '__main__': main()
相關推薦
2048小遊戲Python3.6.5實現
這個2048遊戲是我自學python以後寫的, 用了幾天時間。 其中的某些方法可能寫的很笨, 也可能還存在各種BUG, 歡迎各位評論指出。 下面貼出完整程式碼供大家學習交流。 import random #遊戲分數 gameScore = 0 #遊戲矩陣 matrix
2048小遊戲主要算法實現
mes 方向 時間限制 上下左右 print ron weight color ges http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4681 4681: 2
C語言實現簡易2048小遊戲
blog 而在 而是 null 移動 是我 我們 空指針 主體 一直很喜歡玩這個小遊戲,簡單的遊戲中包含運氣與思考與策略,喜歡這種簡約又不失內涵的遊戲風格。於是萌生了用C語言實現一下的想法。 具體代碼是模仿這個:https://www.cnblogs.com/judgeyo
C語言實現最簡單的2048小遊戲
網上解釋很多了,直接上程式碼吧,這個功能很簡單,易於學習,後期有時間會完善功能 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Key_Up 0x4800
C語言介面實現2048小遊戲
這是我在大一第二學期(兩年前)為了參加比賽,自學後寫的一個Dome,拿出來和大家分享一下,程式碼為兩年前的程式碼,未改動,優化以及各式可能很一般,請見諒。 #include "stdio.h" #include "stdlib.h" #include "time.h" #d
[原始碼和文件分享]基於Python的PyGame庫實現的2048小遊戲
一、簡介 2048的遊戲規則很簡單,每次可以選擇上下左右其中一個方向去滑動,每滑動一次,所有的數字方塊都會往滑動的方向靠攏外,系統也會在空白的地方亂數出現一個數字方塊,相同數字的方塊在靠攏、相撞時會相加。系統給予的數字方塊不是2就是4,玩家要想辦法在這小小的16格範圍中湊出“2048”這個數字方
JQuery初體驗-JavaScript實現2048小遊戲PC端
目錄 效果圖 遊戲頁面 遊戲頁面樣式 遊戲基礎邏輯 遊戲動畫邏輯 遊戲主邏輯 遊戲互動邏輯 效果圖: 遊戲頁面: <!DOCTYPE html> <html lang="en"> <head> <
C++實現2048小遊戲(控制檯版的)
無聊,在公司寫了個2048小遊戲的程式,聊以自娛。(事實是我手機壞了,沒得玩)。 很簡單,直接上程式碼了。 #include <iostream> #include <windows.h> #include <ctime> using
lua實現一個2048小遊戲
用lua寫了個在consle上執行的2048,這裡簡單說下是如何實現的。(原始碼地址:http://download.csdn.net/detail/c_boy_lu/9393255) 1.實現一
java實現2048小遊戲
學習Java基礎有一段時間了,一直想做個小的桌面程式練下手,最近自己有點時間用Java寫了一個2048的桌面程式,和大家分享一下!!! 遊戲效果展示: 1、設計思想 AppFrame.java遊戲的啟動類,只調用了一個MainFrame的構造方法 MainFrame.ja
C語言實現的2048小遊戲
給大一新生寫的一個小遊戲。 缺點:函式名稱和功能略微不對應,函式功能寫得比較亂,時間記錄有誤差,可擴充套件性弱。 優點:通過幾個配置陣列,將單位方塊移動的函式縮短到30行以內。 #include <stdio.h> #include <windows.h&
[Python3] 2048小遊戲
程式碼來源:https://www.shiyanlou.com/courses/368/labs/1172/document小白,最近看到實驗樓的2048的小遊戲,在程式碼上帶了自己的註釋。前期準備:有限狀態機 ##https://www.cnblogs.com/2
js實現2048小遊戲
最近同學參加宣講會,說有個公司要求是寫一個2048小遊戲,參考了一點網上的程式碼以後,自己寫了一個。 寫的思路如下: 1.設定好HTML佈局。大盒子巢狀小盒子,這塊沒什麼可說的。 2.實現遊戲初始化,生成一開始的兩個小塊。這裡就要實現生成隨機2或4,還
C語言在linux終端下實現2048小遊戲:第二版
原來我轉載過一個機遇ncurses的2048,今天無聊自己手寫了一個,看下我的目錄結構: $ tree ../2048/ ../2048/ ├── 2048.c ├── 2048.h └── main.c 0 directories, 3 files 2048.h
2048小遊戲c++實現
用c++實現了一下2048小遊戲,沒有介面,用控制檯顯示。 #include <stdlib.h> #include <time.h> #include <string.h> #include <stdio.h&g
+js實現簡單的2048小遊戲
學習前端半年,本著興趣用canvas結合了js寫了個2048小遊戲,有的地方沒有完善的歡迎各位大神指出。 在寫遊戲開始,首先要在html裡建立canvas標籤,併為canvas增添id,以便使用js呼叫。 <!DOCTYPE html> <html>
學Android--實現2048小遊戲
1、遊戲佈局(activity_main.xml) 首先在xml檔案中實現遊戲的整體佈局 (1)新增兩個TextView用來顯示分數 <LinearLayout android:layout_width="match_pare
C#實現2048小遊戲
要實現這個簡單的小遊戲主要在於實現一個方向移動 數字的移動及合併該如何處理 然後其它方向的邏輯是相同的 我做的這個基本功能實現了 主要分為三個類 Box.cs格子類(一些格子裡儲存的資料,行下標,列下標,是否合併過的開關。。) Grid.cs網格類(主要演算法在裡
C++實現2048小遊戲
程式碼如下: #define _CRT_SECURE_NO_WARNINGS//去掉編譯器內部擴增問題#include<stdio.h>#include<stdlib.h>#include<math.h>#include<graphics.h>//需要下載圖形庫
【python學習】使用python寫一個2048小遊戲
ast stc 遊戲 多少 wan nbsp 小遊戲 效果 參考 個人博客:jerwang.cn 沒有參考其他代碼,效果圖: 話不多少,源代碼: https://github.com/jerustc/Python/blob/master/2048.py【python學