Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不打印颜色-连接4_Python_Python 3.x_Python 2.7_Pygame_Pycharm - Fatal编程技术网

Python 不打印颜色-连接4

Python 不打印颜色-连接4,python,python-3.x,python-2.7,pygame,pycharm,Python,Python 3.x,Python 2.7,Pygame,Pycharm,我想用GUI写一个connect 4游戏,但是我不能在我点击的地方打印颜色,我可以在空格=0的地方打印颜色,我也可以在我点击的地方工作,1和2被打印到黑板的文本版本上,然而,在图形上,我试图得到与输入的玩家号码相对应的打印颜色。 谢谢你的帮助 import numpy as np import pygame import sys import math BLUE = (0,0,255) BLACK = (0,0,0) GREEN = (0,255,0) YELLOW = (255,255,0)

我想用GUI写一个connect 4游戏,但是我不能在我点击的地方打印颜色,我可以在空格=0的地方打印颜色,我也可以在我点击的地方工作,1和2被打印到黑板的文本版本上,然而,在图形上,我试图得到与输入的玩家号码相对应的打印颜色。 谢谢你的帮助

import numpy as np
import pygame
import sys
import math

BLUE = (0,0,255)
BLACK = (0,0,0)
GREEN = (0,255,0)
YELLOW = (255,255,0)
ROW_COUNT = 6
COLUMN_COUNT = 7

def create_board(): # board creation
    board = np.zeros((ROW_COUNT,COLUMN_COUNT))
    return board
def drop_piece(board,row,column, piece): #the dropping of player counters
    board[row][column] = piece

def is_valid_location(board, column): # checks if the location entered is valid to be used
    return board[ROW_COUNT - 1][column] == 0 # if not true column is full

def get_next_open_row(board,column): # checks which row the piece will fall on
    for r in range(ROW_COUNT):
        if board[r][column] == 0:
            return r
def print_board(board): # flips the board so numbers stack from bottom to top
    print(np.flip(board, 0))

def winning_move(board, piece):

    # check horizontal locations for win
    for c in range(COLUMN_COUNT-3):
        for r in range(ROW_COUNT):
            if board[r][c] == piece and board[r][c+1] == piece and board[r][c+2] == piece and board[r][c+3] == piece:
                return True

    # check for vertical locations for win
    for c in range(COLUMN_COUNT):
        for r in range(ROW_COUNT - 3):
            if board[r][c] == piece and board[r+1][c] == piece and board[r+2][c] == piece and board[r+3][c] == piece:
                return True

    #check for positively sloped diagonals
    for c in range(COLUMN_COUNT - 3):
        for r in range(ROW_COUNT - 3):
            if board[r][c] == piece and board[r+1][c+1] == piece and board[r+2][c+2] == piece and board[r+3][c+3] == piece:
                return True

    #check for negatively sloped diagonals
    for c in range(COLUMN_COUNT - 3):
        for r in range(3,ROW_COUNT):
            if board[r][c] == piece and board[r-1][c+1] == piece and board[r-2][c+2] == piece and board[r-3][c+3] == piece:
                return True

def draw_board(board):
    for c in range(COLUMN_COUNT):
        for r in range(ROW_COUNT):
            pygame.draw.rect(screen, BLUE, (c*SQUARESIZE, r*SQUARESIZE+SQUARESIZE, SQUARESIZE, SQUARESIZE))
            pygame.draw.circle(screen, BLACK, (int(c*SQUARESIZE+SQUARESIZE/2), int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)), RADIUS)

    for c in range(COLUMN_COUNT):
        for r in range(ROW_COUNT):

            if board[r][c] == 1:
                pygame.draw.circle(screen, GREEN, (int(c * SQUARESIZE + SQUARESIZE / 2), HEIGHT - int(r * SQUARESIZE + SQUARESIZE + SQUARESIZE / 2)), RADIUS)
            elif board[r][c] == 2:
                pygame.draw.circle(screen, YELLOW,(int(c * SQUARESIZE + SQUARESIZE / 2), HEIGHT - int(r * SQUARESIZE + SQUARESIZE + SQUARESIZE / 2)),RADIUS)
    pygame.display.update()


board = create_board()
print_board(board)
game_over = False
turn = 0

# https://www.pygame.org/docs/    <----- pygame commands
pygame.init()
SQUARESIZE = 100

WIDTH = COLUMN_COUNT * SQUARESIZE

HEIGHT = (ROW_COUNT+1) * SQUARESIZE

size = (WIDTH,HEIGHT)

RADIUS = int(SQUARESIZE/2 - 5 )

screen = pygame.display.set_mode(size)
draw_board(board)
pygame.display.update()

while not game_over:
#asks for player 1 input
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
           # print(event.pos)



            try:
                
        
                if turn == 0:
                    posx = event.pos[0]
                    column = int(math.floor(posx/SQUARESIZE))
                    print(column)
        
                    if is_valid_location(board, column):
                        row = get_next_open_row(board, column)
                        drop_piece(board, row, column, 1)
        
                        if winning_move(board,1):
                            print("PLAYER 1 WINS")
                            game_over = True


        #asks for player 2 input
                else:
                    posx = event.pos[0]
                    column = int(math.floor(posx / SQUARESIZE))
                    print(column)
        
                    if is_valid_location(board, column):
                        row = get_next_open_row(board, column)
                        drop_piece(board, row, column, 2)
        
                    if winning_move(board, 2):
                        print("PLAYER 2 WINS")
                        game_over = True
                        break
        
                print_board(board)
                turn = turn + 1
                turn = turn % 2 #alternates between the two players
            except:
        
                if turn == 0:
                    column = int(input("Player 1 Make your selection (0-6):"))
                    print(column)
        
                    if is_valid_location(board, column):
                        row = get_next_open_row(board, column)
                        drop_piece(board, row, column, 1)
        
                        if winning_move(board,1):
        
                            print("PLAYER 1 WINS")
                            game_over = True
        
                # asks for player 2 input
                else:
                    column = int(input("Player 2 Make your selection (0-6):"))
                    print(column)
        
                    if is_valid_location(board, column):
                        row = get_next_open_row(board, column)
                        drop_piece(board, row, column, 2)
        
                    if winning_move(board, 2):
                        print("PLAYER 2 WINS")
                        game_over = True
                        break
        
                print_board(board)
                draw_board(board)
                turn = turn + 1
                turn = turn % 2  # alternates between the two players
将numpy导入为np
导入pygame
导入系统
输入数学
蓝色=(0,0255)
黑色=(0,0,0)
绿色=(0255,0)
黄色=(255255,0)
行数=6
列计数=7
def create_board():#board creation
board=np.零((行计数,列计数))
返回板
def drop_件(板、行、列、件):#玩家计数器的掉落
板[行][列]=件
def是否有效位置(板、列):#检查输入的位置是否有效以供使用
返回板[行计数-1][列]==0#如果不为真,则列已满
def get_next_open_行(板、列):#检查工件将落在哪一行上
对于范围内的r(行计数):
如果线路板[r][column]==0:
返回r
def打印板(板):#翻转板,使数字从下到上堆叠
打印(np.翻转(板,0))
移动(板、块):
#检查水平位置是否存在win
对于范围内的c(第3列):
对于范围内的r(行计数):
如果板[r][c]==块和板[r][c+1]==块和板[r][c+2]==块和板[r][c+3]==块:
返回真值
#检查win的垂直位置
对于范围内的c(列计数):
对于范围内的r(行计数-3):
如果板[r][c]==件和板[r+1][c]==件和板[r+2][c]==件和板[r+3][c]==件:
返回真值
#检查对角线是否倾斜
对于范围内的c(列计数-3):
对于范围内的r(行计数-3):
如果线路板[r][c]==线路板[r+1][c+1]==线路板[r+2][c+2]==线路板[r+3][c+3]==线路板:
返回真值
#检查对角线是否呈负斜率
对于范围内的c(列计数-3):
对于范围内的r(3,行计数):
如果线路板[r][c]==线路板[r-1][c+1]==线路板[r-2][c+2]==线路板[r-3][c+3]==线路板:
返回真值
def牵引板(板):
对于范围内的c(列计数):
对于范围内的r(行计数):
pygame.draw.rect(屏幕,蓝色,(c*SQUARESIZE,r*SQUARESIZE+SQUARESIZE,SQUARESIZE,SQUARESIZE))
pygame.draw.circle(屏幕,黑色,(int(c*SQUARESIZE+SQUARESIZE/2),int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)),半径)
对于范围内的c(列计数):
对于范围内的r(行计数):
如果电路板[r][c]==1:
pygame.draw.circle(屏幕,绿色,(int(c*SQUARESIZE+SQUARESIZE/2),高度-int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)),半径)
elif板[r][c]==2:
pygame.draw.circle(屏幕,黄色,(int(c*SQUARESIZE+SQUARESIZE/2),高度-int(r*SQUARESIZE+SQUARESIZE+SQUARESIZE/2)),半径)
pygame.display.update()
线路板=创建线路板()
印刷电路板
游戏结束=错误
转动=0

# https://www.pygame.org/docs/ 单元格的顶部是
HEIGHT-r*SQUARESIZE-SQUARESIZE
,单元格的中心是
HEIGHT-r*SQUARESIZE-SQUARESIZE//2

def绘图板(板):
对于范围内的c(列计数):
对于范围内的r(行计数):
pygame.draw.rect(屏幕,蓝色,(c*SQUARESIZE,HEIGHT-r*SQUARESIZE-SQUARESIZE,SQUARESIZE,SQUARESIZE))
pygame.draw.circle(屏幕,黑色,(c*SQUARESIZE+SQUARESIZE//2,高度-r*SQUARESIZE-SQUARESIZE//2),半径)
对于范围内的c(列计数):
对于范围内的r(行计数):
如果电路板[r][c]==1:
pygame.draw.circle(屏幕,绿色,(c*SQUARESIZE+SQUARESIZE//2,高度-r*SQUARESIZE-SQUARESIZE//2),半径)
elif板[r][c]==2:
pygame.draw.circle(屏幕,黄色,(c*SQUARESIZE+SQUARESIZE//2,高度-r*SQUARESIZE-SQUARESIZE//2),半径)
我建议在应用程序循环中连续绘制网格:

screen=pygame.display.set_模式(大小)
clock=pygame.time.clock()
虽然游戏尚未结束:
时钟滴答(60)
屏幕填充(0)
绘图板(板)
pygame.display.update()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
sys.exit()
# [...]


典型的PyGame应用程序循环必须:

  • 通过或处理事件
  • 根据输入事件和时间(分别为帧)更新游戏状态和对象位置
  • 清除整个显示或绘制背景
  • 绘制整个场景(
    blit
    所有对象)
  • 通过或更新显示
  • 限制每秒帧数以限制CPU使用
用于控制每秒帧数,从而控制游戏速度

对象的方法以这种方式延迟游戏,循环的每次迭代都消耗相同的时间段。见:

此方法应每帧调用一次

这意味着循环:

clock=pygame.time.clock()
运行=真
运行时:
时钟滴答(60)
每秒运行60次

见:

此方法应每帧调用一次。它将计算自上次调用以来经过的毫秒数