python指令碼實現開心消消樂的遊戲
編寫一個指令碼, 實現如下的2 個功能 :
1. 執行指令碼時隨機生成一個 關卡
返回: 8⾏ 字串 表⽰關卡初始佈局,對應棋盤中的 8⾏,每⾏包括 8 個字元。每個字元表⽰一種 糖果 ,對應關係為: (B 普通 糖果 ,H 橫炸 糖果 ,V 豎炸 糖果 ,S方炸 糖果 )
2. 一次消除操作
/move .sh <row0> <col0> <row1> <col1>
引數:
row0, col0, row1, col1: 表⽰一次操作的左上角和右下角的 糖果 座標,
⽐如 :row0=0 col1=1 row1=2 clo2 =2
返回:8⾏⽂本,表⽰消除結束且完成下落後的局⾯。
舉例: /move .sh 1 0 1 2
具體實現如下,採用python指令碼實現!注意其中關於s炸可以採用for i in (row-1 row+1): 然後for j in (col-1,col+1)兩個簡單的for迴圈!,然後下移函式演算法可以採用冒泡的思想,把所有的T都和上一行的值對比
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import random
import argparse
import sys
class PlayGame():
def __init__(self,row0,col0,row1,col1):
self.row0=row0
self.col0=col0
self.row1=row1
self.col1=col1
def get_random_flag(self,):
'''
得到一個隨機糖果
'''
flags=['B','B','H','B','B','V','B','B','S','B','B']
i=len(flags)-1
num=random.randint(0,i)
flag=flags[num]
return flag
def get_flag_list(self,len=8):
'''
得到一個len行len列的列表,返回的是一個列表 例如len=3 則返回類似於[['B','H','S'],['B','H','S'],['B','H','S']]的列表
'''
flag_list=[]
i=0
while i<len:
flag_list_name=f'flag_list{i}'
flag_list_name=['']*len
j=0
while j<len:
flag=self.get_random_flag()
flag_list_name[j]=flag
j=j+1
flag_list.append(flag_list_name)
i=i+1
return(flag_list)
def get_choose_flags(self,flag_list,i,j):
'''
首先flag_list為一個列表,類似於[['B','H','S'],['B','H','S'],['B','H','S']],根據輸入的陣列找到對應方陣的flag, 例如如輸入(0,0)則返第1行第1列的flag值
注意i和j的值需要小於flag_list的長度
'''
num=len(flag_list)
if 0<=i<num and 0<=j<num:
flag=flag_list[i][j]
return(flag)
else:
return('')
def Fall_Flags(self,flag_list,r,c):
'''
特定位置的陣列的flag爆炸,之後該flag正上面的所有flag都下移,一直到最後行標號為0的位置上從新生成一個flag
'''
if r==0:
flag_list[r][c]=self.get_random_flag()
else:
while r>0:
flag_list[r][c]=flag_list[r-1][c]
r=r-1
if r==0:
flag_list[0][c]=self.get_random_flag()
return (flag_list)
def Meet_H(self,flag_list,r_h,c_h):
'''
當遇到橫炸的時候,除了需要判斷的flag(也就是在左下方和右上方區域的flag)之外同一行的flag都要爆炸,先設定成T
'''
flag_list[r_h][c_h]='T'
r=0
while r<8:
col_h=r
if flag_list[r_h][col_h]=='B':
flag_list[r_h][col_h]='T'
elif flag_list[r_h][col_h]=='H':
self.Meet_H(flag_list=flag_list,r_h=r_h,c_h=col_h)
elif flag_list[r_h][col_h]=='S':
self.Meet_S(flag_list=flag_list,r_s=r_h,c_s=col_h)
elif flag_list[r_h][col_h]=='V':
self.Meet_V(flag_list=flag_list,r_v=r_h,c_v=col_h)
else:
pass
r=r+1
return (flag_list)
def Meet_V(self,flag_list,r_v,c_v):
'''
當遇到豎炸的時候,逐個判斷是否需要爆炸
自己先設定為T
'''
flag_list[r_v][c_v]='T'
v=0
while v<8:
row_v=v
if flag_list[row_v][c_v]=='B':
flag_list[row_v][c_v]='T'
elif flag_list[row_v][c_v]=='H':
self.Meet_H(flag_list=flag_list,r_h=row_v,c_h=c_v)
elif flag_list[row_v][c_v]=='S':
self.Meet_S(flag_list=flag_list,r_s=row_v,c_s=c_v)
elif flag_list[row_v][c_v]=='V':
self.Meet_V(flag_list=flag_list,r_v=row_v,c_v=c_v)
else:
pass
v=v+1
return (flag_list)
def Meet_B(self,flag_list,r_b,c_b):
flag_list[r_b][c_b]='T'
return (flag_list)
def Meet_S(self,flag_list,r_s,c_s):
'''
當遇到方炸的時候,逐個判斷是否需要繼續炸,首先把自己設定成T
'''
flag_list[r_s][c_s]='T'
row=r_s
col=c_s
if row-1>=0 and col-1>=0:
flag_list[row-1][col-1]='T'
if flag_list[row-1][col-1]=='B':
flag_list[row-1][col-1]='T'
elif flag_list[row-1][col-1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row-1,c_h=col-1)
elif flag_list[row-1][col-1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row-1,c_s=col-1)
elif flag_list[row-1][col-1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row-1,c_v=col-1)
else:
pass
else:
pass
if row-1>=0 and col>=0:
if flag_list[row-1][col]=='B':
flag_list[row-1][col]='T'
elif flag_list[row-1][col]=='H':
self.Meet_H(flag_list=flag_list,r_h=row-1,c_h=col)
elif flag_list[row-1][col]=='S':
self.Meet_S(flag_list=flag_list,r_s=row-1,c_s=col)
elif flag_list[row-1][col]=='V':
self.Meet_V(flag_list=flag_list,r_v=row-1,c_v=col)
else:
pass
else:
pass
if row-1>=0 and col+1<8:
if flag_list[row-1][col+1]=='B':
flag_list[row-1][col+1]='T'
elif flag_list[row-1][col+1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row-1,c_h=col+1)
elif flag_list[row-1][col+1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row-1,c_s=col+1)
elif flag_list[row-1][col+1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row-1,c_v=col+1)
else:
pass
else:
pass
if row>=0 and col-1>=0:
if flag_list[row][col-1]=='B':
flag_list[row][col-1]='T'
elif flag_list[row][col-1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row,c_h=col-1)
elif flag_list[row][col-1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row,c_s=col-1)
elif flag_list[row][col-1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row,c_v=col-1)
else:
pass
else:
pass
flag_list[row][col]='T'
if row>=0 and col+1<8:
if flag_list[row][col+1]=='B':
flag_list[row][col+1]='T'
elif flag_list[row][col+1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row,c_h=col+1)
elif flag_list[row][col+1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row,c_s=col+1)
elif flag_list[row][col+1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row,c_v=col+1)
else:
pass
else:
pass
if row+1<8 and col-1>0:
if flag_list[row+1][col-1]=='B':
flag_list[row+1][col-1]='T'
elif flag_list[row+1][col-1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row+1,c_h=col-1)
elif flag_list[row+1][col-1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row+1,c_s=col-1)
elif flag_list[row+1][col-1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row+1,c_v=col-1)
else:
pass
else:
pass
if row+1<8 and col<8:
if flag_list[row+1][col]=='B':
flag_list[row+1][col]='T'
elif flag_list[row+1][col]=='H':
self.Meet_H(flag_list=flag_list,r_h=row+1,c_h=col)
elif flag_list[row+1][col]=='S':
self.Meet_S(flag_list=flag_list,r_s=row+1,c_s=col)
elif flag_list[row+1][col]=='V':
self.Meet_V(flag_list=flag_list,r_v=row+1,c_v=col)
else:
pass
else:
pass
if row+1<8 and col+1<8:
if flag_list[row+1][col+1]=='B':
flag_list[row+1][col+1]='T'
elif flag_list[row+1][col+1]=='H':
self.Meet_H(flag_list=flag_list,r_h=row+1,c_h=col+1)
elif flag_list[row+1][col+1]=='S':
self.Meet_S(flag_list=flag_list,r_s=row+1,c_s=col+1)
elif flag_list[row+1][col+1]=='V':
self.Meet_V(flag_list=flag_list,r_v=row+1,c_v=col+1)
else:
pass
else:
pass
return (flag_list)
def Set_T_Flags(self,flag_list):
'''
把需要爆炸的flag設定為T,都用row0和col0為起始值來判斷,只接row0<=row1以及col0<=col1的情況
'''
row_num= abs(self.row0-self.row1)
col_num=abs(self.col0-self.col1)
if self.row0<=self.row1 and self.col0<=self.col1:
i=0
while i<=row_num:
j=0
row=self.row0+i
while j<=col_num:
col=self.col0+j
flag=self.get_choose_flags(flag_list,row,col)
if flag=='B':
flag_list=self.Meet_B(flag_list=flag_list,r_b=row,c_b=col)
elif flag=='H':
flag_list=self.Meet_H(flag_list=flag_list,r_h=row,c_h=col)
elif flag=='V':
flag_list=self.Meet_V(flag_list=flag_list,r_v=row,c_v=col)
elif flag=='S':
flag_list=self.Meet_S(flag_list=flag_list,r_s=row,c_s=col)
j=j+1
i=i+1
else:
print('請輸入col0<=col1並且row0<=row1的值! 程式退出!')
exit()
return flag_list
def change_flags(self,flag_list):
'''
遍歷指定列表,遇到T就開始下移
'''
num=len(flag_list)
num_i=0
while num_i<num:
num_j=0
while num_j<num:
if flag_list[num_i][num_j]=='T':
flag_list=self.Fall_Flags(flag_list,num_i,num_j)
num_j=num_j+1
num_i=num_i+1
return flag_list
if __name__ == '__main__':
game=PlayGame(3,4,4,5)
print('<<初始方陣>>')
flag_list=game.get_flag_list(len=8)
for i2 in flag_list:
print(i2)
count=1
while True:
try:
row0,col0,row1,col1 = (input("請輸入四個整數(範圍0到7,空格分割 ):").split())
except ValueError:
print('數字之間請加上空格')
if 0<=int(row0)<8 and 0<=int(col0)<8 and 0<=int(row1)<8 and 0<=int(col1)<8:
info=f'<<第{count}次炸替換成T之後方陣>>'
print(info)
game=PlayGame(row0=int(row0),col0=int(col0),row1=int(row1),col1=int(col1))
flag_list=game.Set_T_Flags(flag_list=flag_list)
for i3 in flag_list:
print(i3)
info1=f'<<第{count}次炸下移之後方陣,也就是第{count+1}爆炸的起始方陣>>'
print(info1)
count=count+1
flag_list=game.change_flags(flag_list)
for i4 in flag_list:
print(i4)
else:
print('請輸入符合要求的四個整數,(範圍0到7,空格分割 ):')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2766771/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用PHP實現開心消消樂演算法PHP演算法
- 【Pygame實戰】開心——消消樂,你樂,我樂,大家樂~GAM
- 利用Python寫個開心消消樂小遊戲,並沒有想象中的複雜Python遊戲
- 還記得月入1.9億的《開心消消樂》嗎?解鎖中老年遊戲產業掘金新姿勢遊戲產業
- 消消樂
- Unity 消消樂開發思路Unity
- 微信小程式也能玩《開心消消樂》了?長青IP再掀熱潮!微信小程式
- 消消樂實驗總結與反思
- BBIN波音館開心消消樂簡單又易懂的攻略技巧打法分享個人多年的經驗
- 全新消除遊戲 《天天掛機消消樂》今日上線!遊戲
- Vue 版消消樂小遊戲(pc/手機皆可線上體驗,附原始碼)Vue遊戲原始碼
- 2017年《開心消消樂》開發商營收近23億元 淨利潤7.65億元營收
- 3000關get√ “治癒系消除手遊”《開心消消樂》為何始終令人著迷?
- 消消樂對戰PK模式開發介紹模式
- 【動畫消消樂|CSS】083.純CSS實現卡通齒輪效果動畫CSS
- 朝夕光年的“消消樂”遊戲終於浮出水面,你看好它嗎?遊戲
- 種菜、養雞、消消樂……這是「不務正業」的電商遊戲遊戲
- ETL指令碼的實現指令碼
- Python tkinter 實現 指令碼工具 GUI模版Python指令碼GUI
- python實現自動搶課指令碼Python指令碼
- shell指令碼和python指令碼實現批量ping IP測試指令碼Python
- 【鴻蒙千帆起】《開心消消樂》完成鴻蒙原生應用開發,創新多端聯動使用者體驗鴻蒙
- 教你如何基於python實現指令碼加密Python指令碼加密
- 網路卡流量監控指令碼,python實現指令碼Python
- 使用python實現memcached的啟動服務指令碼rcPython指令碼
- Locust 程式碼指令碼實現指令碼
- python 小指令碼 (實現 elasticsearch 匯出匯入)Python指令碼Elasticsearch
- 利用Python實現自動掃雷小指令碼Python指令碼
- 從零開始 實現一個自己的指令碼引擎指令碼
- 從零開始實現一個自己的指令碼引擎指令碼
- Python程式碼實現“FlappyBird”小遊戲PythonAPP遊戲
- 怎麼用python寫簡單的遊戲指令碼?Python遊戲指令碼
- shell 指令碼實現的守護程式指令碼
- 2020 年第一屆遼寧省大學生程式設計競賽 D.開心消消樂(點分治)程式設計
- 使用Python指令碼在Linux下實現部分Bash Shell的教程Python指令碼Linux
- 用 Python 指令碼實現對 Linux 伺服器的監控Python指令碼Linux伺服器
- 指令碼div實現拖放功能指令碼
- 批次kill session實現指令碼Session指令碼