#フィールドデータ field=[] for y in range(22): sub=[] for x in range(12): if x==0 or x==11 or y==21: sub.append(8) else: sub.append(7) field.append(sub)
#落ちるテトロミノを表示する関数 def drawTetris(): for i in range(4): x=(tetro[type1][i*2]+moveX)*SIZE y=(tetro[type1][i*2+1]+moveY)*SIZE can.create_rectangle(x, y, x+SIZE, y+SIZE, fill=color[type1])
#次のテトロミノを表示する関数 def nextTetro(): can_next.delete("all") for i in range(4): x=(tetro[next1][i*2]+1)*SIZE y=(tetro[next1][i*2+1]+1)*SIZE can_next.create_rectangle(x, y, x+SIZE, y+SIZE, fill=color[next1])
#フィールドを表示する関数 1が壁、0が空間 def drawField(): for i in range(21): for j in range(12): outLine=0 if color[field[i+1][j]]=="white" else 1 can.create_rectangle(j*SIZE, i*SIZE, (j+1)*SIZE, (i+1)*SIZE, fill=color[field[i+1][j]], width=outLine)
#テトロミノを動かす関数 def keyPress(event): global moveX, moveY afterX=moveX afterY=moveY afterTetro=[] afterTetro.extend(tetro[type1]) if event.keysym=="Right": afterX+=1 elif event.keysym=="Left": afterX-=1 elif event.keysym=="Down": afterY+=1 elif event.keysym=="space": afterTetro.clear() for i in range(4): afterTetro.append(tetro[type1][i*2+1]*(-1)) afterTetro.append(tetro[type1][i*2]) judge(afterX, afterY, afterTetro) #アタリ判定関数呼び出し
def judge(afterX, afterY, afterTetro): #アタリ判定をする関数 global moveX, moveY result=True for i in range(4): x=afterTetro[i*2]+afterX y=afterTetro[i*2+1]+afterY if field[y+1][x]!=7: result=False if result==True: moveX=afterX moveY=afterY tetro[type1].clear() tetro[type1].extend(afterTetro) return result
def dropTetris(): global moveX, moveY, type1, next1, timer afterTetro=[] afterTetro.extend(tetro[type1]) result=judge(moveX, moveY+1, afterTetro) if result==False: for i in range(4): x=tetro[type1][i*2]+moveX y=tetro[type1][i*2+1]+moveY field[y+1][x]=type1 deleteLine() type1=next1 #次のテトロミノを落とす next1=random.randint(0,6) #can_next.delete("all") moveX=4 moveY=0 can.after(timer, dropTetris) timer-=2 if timer<140: timer=180
def deleteLine(): global score for i in range(1, 21): if 7 not in field[i]: for j in range(i): for k in range(12): field[i-j][k]=field[i-j-1][k] score+=800-timer for i in range(1, 11): if 7!=field[1][i]: messagebox.showinfo("information", "GAME OVER!") exit()