python--无界面4*4拼图 游戏

第一次学习python,就此写了一个之前曾沉迷的4*4的拼图游戏,然而没有界面,全部通过输入命令完成。

规则:1、只能移动空白格周围的数字,并且移到空白格处 2、把数字按1-15拼接起来

以下是启动文件start.py

#coding = utf-8
#! python3
import puzzle


def game_intro():
	print (
	"This is a 4*4 puzzle game.\n"
	+ "You can move the pieces around the blank piece.\n"
	+ "Please input the site with the style - col raw(e.g. 1 2) if you want to move it \n"
	)

def game_help():
	print(
	"e - exit the game\n"
	+ "h - show this help\n"
	+ "r - restart the game\n"
	+ "s - show the puzzle\n"
	)

def main():	
	puzzle_game = puzzle.Puzzle()
	game_intro()
	game_help()
	print(str(puzzle_game))
	site = raw_input("please input the site: ")
	while "e" <> site:
		if "h" == site:
			game_help()
		elif "r" == site:
			puzzle_game.refresh()
			print(str(puzzle_game))
		elif "s" == site:
			print(str(puzzle_game))
		elif len(site) != 3 or not site[0].isdigit() or not site[2].isdigit() or site[1] <> " ":
			print("please with the correct style")
		elif not puzzle_game.move_block( int(site[0]), int(site[2]) ):
			print("please with the correct site")
		else:
			print(str(puzzle_game))
			if puzzle_game.if_finished():
				print("congratulation!!")
				break	
		site = raw_input("please input the site: ")

if __name__ == "__main__":
    main()


puzzle.py

#coding = utf-8
import random

print ("has ")

def hello_world(str):
	print ("hello world " + str)
	return 

class Puzzle:
	__puzzleList = []
	
	__len = 4
	
	def __init__(self):
		self.refresh();
		return	
		
	'''	
	def __del__(self):
		del self.__puzzleList
		del self.__len
		return
	'''	
	
	def refresh(self):
		self.__clear()
		for index in range(self.__len * self.__len - 1):
			self.__puzzleList.append(index+1)
		random.shuffle(self.__puzzleList)
		self.__puzzleList.append(0);
		return
	
	def __clear(self):
		while len(self.__puzzleList) != 0:
			self.__puzzleList.pop()
	
	def __str__(self):
		string = ""
		for index in range(len(self.__puzzleList)):
			if 0 != index and 0 == index % self.__len:
				string += "\n"
			if 0 == self.__puzzleList[index]:
				string += " ".center(4)
				#rjust or ljust
			else:
				string += str(self.__puzzleList[index]).center(4)
		return string
	
	def move_block(self,siteX,siteY):
		site = (siteX-1) * self.__len + siteY - 1
		is_move = True
		if siteY < 1 or siteY > self.__len or siteX > self.__len or siteX < 1:
			is_move = False
		elif siteY != self.__len and 0 == self.__puzzleList[site + 1]:
			self.__puzzleList[site + 1] = self.__puzzleList[site]
			self.__puzzleList[site] = 0
		elif siteY != 1 and 0 == self.__puzzleList[site - 1]:
			self.__puzzleList[site - 1] = self.__puzzleList[site]
			self.__puzzleList[site] = 0
		elif siteX != 1 and 0 == self.__puzzleList[site - self.__len]:
			self.__puzzleList[site - self.__len] = self.__puzzleList[site]
			self.__puzzleList[site] = 0
		elif siteX != self.__len and 0 == self.__puzzleList[site + self.__len]:
			self.__puzzleList[site + self.__len] = self.__puzzleList[site]
			self.__puzzleList[site] = 0
		else:
			is_move = False
		return is_move
		
	def if_finished(self):
		for index in range(len(self.__puzzleList)):
			if index + 1 != self.__puzzleList[index]:
				return False
		return True
	


有事没事可以玩一玩~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值