Python 制作简单的列表网格
大家好,我需要帮助做游戏网格的游戏人不要生气。 我应该做一个函数,生成一个格式为Python 制作简单的列表网格,python,list,Python,List,大家好,我需要帮助做游戏网格的游戏人不要生气。 我应该做一个函数,生成一个格式为n*n 一般来说,对于每个奇数,臂的宽度是3,长度是n。应该用列表列表来完成,因为我必须画一个数字绕这个网格,所以我需要坐标。 我做了这个游戏网格的周期 def gensachovnicu(n): matica='*'' ' matica1='X ' matica2='D ' for j in range(n): for i in range(n):
n*n
一般来说,对于每个奇数,臂的宽度是3,长度是n
。应该用列表列表来完成,因为我必须画一个数字绕这个网格,所以我需要坐标。
我做了这个游戏网格的周期
def gensachovnicu(n):
matica='*'' '
matica1='X '
matica2='D '
for j in range(n):
for i in range(n):
if i<((n-3)//2) and j<((n-3)//2):
print(' ',end='')
elif i<((n-3)//2) and j>(n-((n-3)//2)-1):
print(' ',end='')
elif i>(n-((n-3)//2)-1) and j<((n-3)//2):
print(' ',end='')
elif i>(n-((n-3)//2)-1) and j>(n-((n-3)//2)-1):
print(' ',end='')
elif i==(n//2) and j>0 and j<(n-1) and j!=(n//2):
print(matica2,end='')
elif i==(n//2) and j==(n//2):
print(matica1,end='')
elif j==(n//2) and i>0 and i<(n-1):
print(matica2,end="")
else:
print(matica,end='')
print()
def gensachovnicu(n):
马蒂卡='*''
matica1='X'
马蒂卡2='D'
对于范围(n)内的j:
对于范围(n)中的i:
如果i(n-((n-3)//2)-1):
打印(“”,结束=“”)
elif i==(n//2)和j>0以及j0和i责任划分示例:
from random import randint
def dice():
return randint(1,6)
# true for all fields (including border ones and player)
def IsField(n, x,y):
off = (n-3)//2 # offset to the sides of 3 spaces playing ground
if (x >= off and x < n-off):
return True
if (y >= off and y < n-off):
return True
return False
# true only for border
def IsBorder(n,x,y):
off = (n-3)//2
mid = (n-1)//2 # the middle where player moves
if (y >= n) or (x >=n) or (y<0) or (x<0):
return False
if (y == 0 or y == n-1) and x in [mid-1, mid, mid+1]:
return True
if (x == 0 or x == n-1) and y in [mid-1, mid, mid+1]:
return True
if (y > 0 or y < n-1) and x == mid:
return False
if (x > 0 or x < n-1) and y == mid:
return False
if ((x == off or x == off+2) and not x == mid):
return True
if ((y == off or y == off+2) and not y == mid):
return True
return False
# what to mark field with?
def GetMarker(n,x,y):
if IsBorder(n,x,y):
return '*'
else:
return ' '
# repair wrong inputs to odd and minimal 9
def MakeOddMin9(n):
if n % 2==0:
n += 1 # make odd
n = max(9,n) # min 9
return n
# construct the board, player pos still missing
def MakeBoard(n):
n = MakeOddMin9(n)
base = [ [GetMarker(n,x,y) for x in range(n)] for y in range(n)]
mid = (n-1)//2
base[0][mid] = 'a' # add player
return (base,(mid,0))
# print the boards fields
def PrintBoard(board):
print("")
size = len (board)
for y in range(size):
row = ""
for x in range(size):
row += board[y][x]
print (row)
print ("")
def Move(b,x,y,nx,ny):
b[y][x]='*'
b[ny][nx]='a'
# moves player along 1 tile
def MoveOne(board,player):
actX = player[0]
actY = player[1]
mid = (len(board)-1)//2
# right
if IsBorder(len(board), actX+1, actY) and actY < mid:
Move(board,actX,actY,actX+1,actY)
player = (actX+1,actY)
# down
elif IsBorder(len(board), actX, actY+1) and actX > mid:
Move(board,actX,actY,actX,actY+1)
player = (actX,actY+1)
#left
elif IsBorder(len(board), actX-1, actY) and actY > mid:
Move(board,actX,actY,actX-1,actY)
player = (actX-1,actY)
#up
elif IsBorder(len(board), actX, actY-1) and actX < mid:
Move(board,actX,actY,actX,actY-1)
player = (actX,actY-1)
return (board,player)
b, player = MakeBoard(19)
mid = (len(b)-1)//2
PrintBoard(b)
inputKey= ''
while(inputKey == ''):
moves = dice()
b[mid][mid] = str(moves)
for n in range(0,moves):
b,player = MoveOne(b,player)
PrintBoard(b)
inputKey = input("\n Hit enter. Enter anything to quit.").lower()
if (inputKey != ''):
break
导入操作系统
导入时间
随机输入
doska=[]
n=int(输入('Zadaj rozmer hracieho pola:'))
def创建_sachovnica(n):
全球多斯卡
doska=[''表示范围(n)中的i]表示范围(n)中的j]
npol=n//2
对于范围(n)中的i:
doska[npol-1][i]='*'
doska[npol+1][i]='*'
doska[i][npol-1]='*'
doska[i][npol+1]='*'
doska[npol][0]='*'
doska[npol][n-1]='*'
doska[0][npol]='*'
doska[n-1][npol]='*'
对于范围内的i(1,npol):
doska[npol][i]='D'
doska[npol][n-i-1]='D'
doska[i][npol]=“D”
doska[n-i-1][npol]='D'
doska[npol][npol]='X'
def print_sachovinica(n):
对于doska中的n:
打印(''.join(n))
打印()
def gensachovnicu(n):
创建_sachovinica(n)
萨科夫尼卡印刷厂(n)
def nextpos(doska,x,y):
尺寸=透镜(多斯卡)
如果x>=大小//2:
如果ysize//2且doska[x][y-1]='*':
返回x,y-1
elif x>size//2和doska[x][y-1]='*':
返回x,y-1
返回x,y
def nextpos2(doska,s,r):
velkost=len(多斯卡)
如果s>=velkost//2:
如果rvelkost//2和doska[s][r-1]=='*':
返回s,r-1
elif s>velkost//2和doska[s][r-1]=='*':
返回s,r-1
返回s,r
def pohyb(n、x、y、s、r):
尽管如此:
创建_sachovinica(n)
doska[x][y]=“A”
多斯卡[s][r]=“B”
hod=random.randint(1,6)
hod1=随机随机随机数(1,6)
如果hod==1:
x、 y=nextpos(doska,x,y)
elif hod==2:
对于范围内的i(hod):
x、 y=nextpos(doska,x,y)
elif hod==3:
对于范围内的i(hod):
x、 y=nextpos(doska,x,y)
elif hod==4:
对于范围内的i(hod):
x、 y=nextpos(doska,x,y)
elif hod==5:
对于范围内的i(hod):
x、 y=nextpos(doska,x,y)
elif hod==6:
rozhodnutie1=str(输入('Pohyb(P)/Nova figurka(N)'))
如果rozhodnutie1=='P':
对于范围内的i(hod):
x、 y=nextpos(doska,x,y)
其他:
多斯卡[n-1][((n-3)//2)]='A'
如果hod1==1:
s、 r=nextpos2(多斯卡,s,r)
elif hod1==2:
对于范围内的i(hod1):
s、 r=nextpos2(多斯卡,s,r)
elif hod1==3:
对于范围内的i(hod1):
s、 r=nextpos2(多斯卡,s,r)
elif hod1==4:
对于范围内的i(hod1):
s、 r=nextpos2(多斯卡,s,r)
elif hod1==5:
对于范围内的i(hod1):
s、 r=nextpos2(多斯卡,s,r)
elif hod1==6:
rozhodnutie=str(输入('Pohyb(P)/Nova figurka(N)'))
如果rozhodnutie=='P':
对于范围内的i(hod1):
s、 r=nextpos2(多斯卡,s,r)
其他:
多斯卡[0][(n-3)//2)+2]=“B”
萨科夫尼卡印刷厂(n)
印刷品(hod)
印刷品(hod1)
时间。睡眠(1)
根萨科夫尼库(北)
pohyb(n,(n-1),((n-3)//2),0,((n-3)//2)+2)
印刷品(图(n))
这是一个故事,不是一个问题。不要生气。注意:不均匀=奇怪
“但时间太长了,我对付不了他。”这意味着什么?从划分责任开始。编写一个def,获取列表列表并打印它们,创建一个数据结构作为您的比赛场地(def创建它),记住playstone的坐标,在更改其位置时,清除IST列表中的数据单元,并将其放置到新的位置。玩家应在中间移动,以便在星星上移动。您可以使用IsBorder(board,x,y)
-或通过选中如果board[y][x]来检查字段是否为边框磁贴=='*'
在正确初始化的电路板中。如果在检查IsBorder(board,newX,newY)
并将bord[newY][newX]
设置为您的gamepieces representationchar后,用'*'
替换您的gamepieces位置,您可以沿边缘移动它。如果你需要游戏机制方面的帮助,请在一篇新帖子中说明规则,并将其链接到这篇文章——也许有人会帮你。这个问题是关于制作列表的网格…@Item现在它移动了。我这样做,但我有一个问题。我怎样才能允许这个人物进入?我怎样才能在“房子”中确定这个数字呢?
*a*
* *
* *
**** ****
* *
**** ****
* *
* *
***
***
* *
* *
**** a***
* 4 *
**** ****
* *
* *
***
Hit enter. Enter anything to quit.
***
* *
* *
**** ***a
* 3 *
**** ****
* *
* *
***
Hit enter. Enter anything to quit.
***
* *
* *
**** ****
* 1 a
**** ****
* *
* *
***
Hit enter. Enter anything to quit.
***
* *
* *
**** ****
* 5 *
**** ****
* a
* *
***
Hit enter. Enter anything to quit.
***
* *
* *
**** ****
* 4 *
**** ****
* *
* *
a**
Hit enter. Enter anything to quit.
***
* *
* *
**** ****
* 4 *
**a* ****
* *
* *
***
Hit enter. Enter anything to quit.
***
* *
* *
*a** ****
* 5 *
**** ****
* *
* *
***
Hit enter. Enter anything to quit.
*a*
* *
* *
**** ****
* 6 *
**** ****
* *
* *
***
Hit enter. Enter anything to quit.
import os
import time
import random
doska = []
n=int(input('Zadaj rozmer hracieho pola:'))
def create_sachovnica(n):
global doska
doska = [[' ' for i in range(n)] for j in range(n)]
npol = n // 2
for i in range(n):
doska[npol - 1][i] ='*'
doska[npol + 1][i] ='*'
doska[i][npol - 1] ='*'
doska[i][npol + 1] ='*'
doska[npol][0] ='*'
doska[npol][n - 1] ='*'
doska[0][npol] ='*'
doska[n - 1][npol] ='*'
for i in range(1, npol):
doska[npol][i] ='D'
doska[npol][n - i - 1] ='D'
doska[i][npol] ='D'
doska[n - i - 1][npol] ='D'
doska[npol][npol] ='X'
def print_sachovnica(n):
for n in doska:
print(' '.join(n))
print()
def gensachovnicu(n):
create_sachovnica(n)
print_sachovnica(n)
def nextpos(doska, x, y):
size = len(doska)
if x >= size // 2:
if y < size // 2 and doska[x - 1][y] == '*':
return x - 1, y
else:
if y <= size // 2 and doska[x][y + 1] == '*':
return x, y + 1
elif y <= size // 2 and doska[x-1][y] == '*':
return x-1,y
if y >= size // 2:
if x <= size // 2 and doska[x + 1][y] == '*':
return x + 1, y
elif x < size // 2 and doska[x][y+1] == '*':
return x,y+1
elif x > size // 2 and doska[x][y-1] == '*':
return x,y-1
elif x > size // 2 and doska[x+1][y] == '*':
return x+1,y
else:
if x > size // 2 and doska[x][y - 1] == '*':
return x, y - 1
elif x > size // 2 and doska[x][y - 1] == '*':
return x, y - 1
return x, y
def nextpos2(doska, s, r):
velkost = len(doska)
if s >= velkost // 2:
if r < velkost // 2 and doska[s - 1][r] == '*':
return s - 1, r
else:
if r <= velkost // 2 and doska[s][r + 1] == '*':
return s, r + 1
elif r <= velkost // 2 and doska[s-1][r] == '*':
return s-1,r
if r >= velkost // 2:
if s <= velkost // 2 and doska[s + 1][r] == '*':
return s + 1, r
elif s < velkost // 2 and doska[s][r+1] == '*':
return s,r+1
elif s > velkost // 2 and doska[s][r-1] == '*':
return s,r-1
elif s > velkost // 2 and doska[s+1][r] == '*':
return s+1,r
else:
if s > velkost // 2 and doska[s][r - 1] == '*':
return s, r - 1
elif s > velkost // 2 and doska[s][r - 1] == '*':
return s, r - 1
return s, r
def pohyb(n, x, y, s ,r):
while True:
create_sachovnica(n)
doska[x][y] = 'A'
doska[s][r] = 'B'
hod=random.randint(1,6)
hod1=random.randint(1,6)
if hod ==1 :
x, y = nextpos(doska, x, y)
elif hod==2:
for i in range(hod):
x, y = nextpos(doska, x, y)
elif hod ==3:
for i in range(hod):
x, y = nextpos(doska, x, y)
elif hod==4:
for i in range(hod):
x, y = nextpos(doska, x, y)
elif hod == 5:
for i in range(hod):
x, y = nextpos(doska, x, y)
elif hod ==6:
rozhodnutie1 = str(input('Pohyb(P)/Nova figurka(N)'))
if rozhodnutie1 == 'P':
for i in range(hod):
x, y = nextpos(doska, x, y)
else:
doska[n-1][((n - 3) // 2)] = 'A'
if hod1==1:
s, r = nextpos2(doska, s, r)
elif hod1==2:
for i in range(hod1):
s, r = nextpos2(doska, s, r)
elif hod1==3:
for i in range(hod1):
s, r = nextpos2(doska, s, r)
elif hod1==4:
for i in range(hod1):
s, r = nextpos2(doska, s, r)
elif hod1==5:
for i in range(hod1):
s, r = nextpos2(doska, s, r)
elif hod1==6:
rozhodnutie=str(input('Pohyb(P)/Nova figurka(N)'))
if rozhodnutie=='P':
for i in range(hod1):
s, r = nextpos2(doska, s, r)
else:
doska[0][((n-3)//2)+2] = 'B'
print_sachovnica(n)
print(hod)
print(hod1)
time.sleep(1)
gensachovnicu(n)
pohyb(n,(n-1),((n-3)//2),0,((n-3)//2)+2)
print(figurky(n))