留不住你的温柔,小岛南,情侣头像-有爱俱乐部,让爱心充满这个世界

admin 3周前 ( 11-19 15:52 ) 0条评论
摘要: import randomimport curses# 一开始生成两个方块STARTUP_TILES = 2# 随机生成的方块中出现4的概率FOUR_POSSIBILITY = 0...

import random

import curses

# 一开端生成两个方块

STARTUP_TILES = 2

# 随机生成的方块中呈现4的概率

FOUR_POSSIBILITY = 0.1

# 游戏板

BOARD = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

# 游戏分数

SCORE = 0

# 是否有2048

HAS_2048 = False

# 是否现已不能动了

IS_STUCK = False

# 是否现已问过是否需求持续游戏了

ASKED_FOR_CONTINUE = False

# 方向

LEFT, RIGHT, UP, DOWN enimem= 0, 1, 2, 3

# 用来代表是否能够完毕游戏的常量

CAN_END = True

VECTOR = [[-1, 0], [1, 0], [0, -1], [0, 1]]

SUCCESS = True

FAILED = False

# curses相关

SCREEN = None

def clip(num, lowerbound, upperbound):

if num < lowerbound:

return lowerbound

elif 留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际num > upperbound:

return upperbound韩国黄智仁

else:

return num

def print_score():

global SCREEN

SCREEN.addstr(9, 0, ''.join(['本场游戏完毕,得分:', str(SCORE), '。']))

def print_prompt(prompt):

global SCREEN

SCREEN.addstr(10, 0, prompt)

def get_user_input(prompt, requested_input):

global SCREEN

error_prompt_str = ''.join(

['请输入', ','.join([str(x) for x in requested_inpu留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际t]), '的其中之一。'])

print_prompt(prompt)

user_input = SCREEN.getkey()

while user_input not in requested_input:

print_prompt(error_prompt_str)

user_input = SCREEN.getkey()

return user_input

def get_random_tile_number():

return 4 if random.random() <= FOUR_POSSIBILITY else 2

def get_empty_pos():

result = []

for y, row in enumerate(BOARD):

for x, _ in enumerate(row):

if BOARD[y][x] == 0:

result.append((x, y))

return resu黑水锅庄lt

def get_random_empty_pos():

# 由于get_empty_pos回来的是(x, y),对应横坐标(也便是列数)和横坐标(行数)

try:

col, row = random.choice(get_empty_pos())

return row, col

except IndexError:

return None

def gen_tile():

pos = get_random_empty_pos()

if pos is None:

return FAILED

row, col = pos

numbe浙江巨龙箱包有限公司r = get_random_tile_number()

BOARD[row][col] = number

return SUCCESS

# 开端新游戏

def new_game():

global BOARD, SCORE, HAS_2048, IS_STUCK, ASKED_FOR_CONTINUE

# 将板和分数清空

BOARD = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际0, 0]]

SCORE = 0

HAS_2048 = False

IS_STUCK = False

ASKED_FOR_CONTINUE = False

# 随机生成开端方块

for _ in range(STARTUP_TILES):

gen_tile()

while True:

print_board()

check_board()

if HAS_2048 and not ASKED_FOR_CONTINUE:

user_choice = get_user_input(

'你兼并出了2048!还要持续吗?(输入Y持续,输入Q完毕这盘游戏)[Y/Q]:',

['Y', 'Q', 'y', 'q']

)

if user_choice in 'yY':

print_prompt('好的,持续游戏……')

ASKED_FOR_CONTINUE = True

elif user_choice in 'qQ':

print_prompt('好的,完毕游戏……')

break

elif IS_STUCK:

break

# 取用户输入

direction = 阿米乃是什么意思get_user_input(

'请按方向键移动方块。(按Q抛弃本盘游戏)',

['KEY_UP', 'KEY_DOWN', 'KEY_LEFT', 'KEY_RIGHT', 'Q', 'q']

)

if direction in 'qQ':

break

elif dire马铃薯兔盲盒ction == 'KEY_LEFT':

direction = LEFT

elif direction == 'KEY_RIGHT':

direction = RIGHT

elif direction == 'KEY留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际_UP':

direction = UP

elif direction == 'KEY_DOWN':

direction = DOWN

moved_result = move_tile(direction)

if moved_result:

gen_tile()

print_score()

# 这里是这样:整块板分为(1)顶部的边框和(2)数字和数字下面的边框。

# 横向同理,分为(1)左面的边框和(2)数字和数字右边的边框。

def print_board():

# 顶部边框

SCREEN.addstr(0, 0, '+--杭州师范大学校歌--+----+----+----+')

for y, row in enumerate(BOARD):

# 左面边框

SCREEN.addstr(y *高兴大本营20140517 2 + 1, 0, '|')

# the number

for x, num in enumerate(row):

# 咱们用0表明当时方位没有方块

numstr = str(num) if num != 0 else ''

SCREEN.addstr(y * 2 + 1, x * 5 + 1, numstr +

(' ' * (4 - len(numstr))) + '|')

# 数字下面的边框

SCREEN.addstr(y * 2 + 2, 0, '+----+----+----+----+')

def move_tile(direction):

global SCORE

def get_line(offset: int, direction: int):

'''

取direction上offset一行/列的一切方块。例易遥重生文如,当需求将第2行左移时,用

get_line(1, LEFT)取得这一行。

'''

global BOARD

if direction == LEFT:

return BOARD[offset]

elif direction == RIGHT:

return list(reversed(BOARD[offset]))

elif direction == UP:

return [BOARD[y][offset] for y in range(4)]

elif direction == DOWN:

return [BOARD[y][offset] for y in range(3, -1, -1)]

def put_line(line: list, offset: int, direction: int):

'''

将一条方块依照direction所指的方向放进游戏板中。

'''

global BOARD

if direction == LEFT:

BOARD[offset] = line

elif direction 巴士眼== RIGHT:

BOARD[offset] = list(r留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际eversed(line))

elif direction == UP:

for y in range(4):

BOARD[y][offset] = line[y]

eli爱至暮夏f direction == DOWN:

for y in range(4):

BOARD[y][offset] = line[3 -菲比梦游仙界 y]

def move(line: list):

'''

移动一条方块。

'''

new_line = []

gained_score = 0

i = 0

while i < 4:

if line[i] == 0:

i += 1

else:

old_tile = line[i]

i七十路 += 1

while i < 4 and line[i] == 0:

i += 1

if i >= 4 or line[i] != old_tile:

new_line.app留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际end(old_tile)

else:三老头袭臀

gained_score += line[i] + old_tile

new_line.append(line[i] + old_tile)

i += 1

while len(new_line) < 4:

new_line.append(0)

# 这里有三种状况:

# 1. 移动不了。

# 2. 移动了,可是没有得分。

# 3. 移动了,也得分了。

# 在这里,呈现第一种状况时回来None,第二/三种状况回来移动好的方块和

# 本次移动取得的分。

if new_line == line:

return None

else:

return new_line, gained_score

board_moved = False

for offset in range(4):

line = get_line(offset, direction)

moved_line = move(line)

if movedmystic妹妹_line is not None:

board_moved = True

line, gained_score = moved_line

put_line(line, offset, direction)

SCORE += 高峰音像gained_score

put_line(line, offset, direction)

# 在这里,关于整个游戏板,有两种状况:

# 1. 有至少一行/一列移动了。

# 2. 没有。悉数都没有移动。

# 在第二种下是不应该生成新的方块的。在这里回来游戏板有没有移动:

return board_moved

def get_neighbour(x, y, width, height):

global VECTOR

result = []

for vec in VECTOR:

new_x = x + vec[0]

new_y = y + vec[1]

if 0 <= new_x < width and 0 <= new_y < height:

result.append((new_x, new_y))

return result

def check_board():

global BOARD, HAS_2048, IS_STUCK

for y, row in enumerate(BOARD):

for x, num in enumerate(row):

# 如果有2048,那么就记住有2048。

if num == 2048:

HAS_2048 = True

return

# 如果有空位,那么就能够持续移动。

elif num == 0:

IS_STUCK = False

return

else:

for new_x, new_y in get_neighbour(x, y, 4, 4):

if BOARD[new_y][new_x] == num:

IS_STUCK = False

retu肉体买卖rn

IS_STUCK = True

return

def main(stdscr):

global SCREEN

SCREEN = stdscr

while True:

SCREEN.clear()

new_game()

user_choice = get_user_input(

'是否开端下一盘?(输入Y开端下一盘,输入Q退出)[Y留不住你的温顺,小岛南,情侣头像-有爱沙龙,让爱心充溢这个国际/Q]', ['Y', 'Q', 'y', 'q'])

if user_choice in 'qQ':

print_prompt('正在退出……')

break

elif村庄小医神叶枫 user_choice in 'yY':

print_prompt('开端下一盘……')狒狒人品

continue

# don't start the thing when loading in interactive mode.

if __name__ == '__main__':

curses.wrapper(main)

文章版权及转载声明:

作者:admin本文地址:http://lovecub50.com/articles/4681.html发布于 3周前 ( 11-19 15:52 )
文章转载或复制请以超链接形式并注明出处有爱俱乐部,让爱心充满这个世界