Skip to content

Commit

Permalink
G-baseballGame 파일과 G-memoryGame 파일을 커밋합니다
Browse files Browse the repository at this point in the history
  • Loading branch information
ParkJeonghyeon1013 committed Oct 10, 2023
1 parent 5aafcea commit e360942
Show file tree
Hide file tree
Showing 2 changed files with 266 additions and 13 deletions.
43 changes: 30 additions & 13 deletions G-baseballGame.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@
#define global variable
clicked = False
counter = answer

firstNum = 0
secondNum = 0
thirdNum = 0

class panel():
#colours for button and text
Expand Down Expand Up @@ -69,6 +71,7 @@ def draw_button(self):

#get mouse position
pos = pygame.mouse.get_pos()


#create pygame Rect object for the button
button_rect = Rect(self.x, self.y, self.width, self.height)
Expand All @@ -78,6 +81,7 @@ def draw_button(self):
if pygame.mouse.get_pressed()[0] == 1:
clicked = True
pygame.draw.rect(screen, self.click_col, button_rect)
self.append_value(firstNum)
elif pygame.mouse.get_pressed()[0] == 0 and clicked == True:
clicked = False
action = True
Expand All @@ -98,7 +102,18 @@ def draw_button(self):
screen.blit(text_img, (self.x + int(self.width / 2) - int(text_len / 2), self.y + 25))
return action


def append_value(self,new_value):
# Set a limit of values that can be entered
if self.text.get_width() < 260:
if self.value == "0" or self.new_entry:
self.value = new_value
self.new_entry = False
else:
self.value += new_value

self.text = self.font.render(self.value,True,BLACK)
# Set key_pressed as true
self.key_pressed = True

# 사용자 입력 숫자의 총합
checkPlace = 0 # 사용자가 누른 숫자의 자릿수 체크
Expand Down Expand Up @@ -141,31 +156,33 @@ def draw_button(self):

# 사용자 입력용 숫자 키패드
if one.draw_button():
print(answer)
firstNum = 1
append

if two.draw_button():
print('Two')
firstNum = 2
if three.draw_button():
print('Two')
firstNum = 3
if four.draw_button():
print('Two')
firstNum = 4
if five.draw_button():
print('Two')
firstNum = 5
if six.draw_button():
print('Two')
firstNum = 6
if seven.draw_button():
print('Two')
firstNum = 7
if eight.draw_button():
print('Two')
firstNum = 8
if nine.draw_button():
print('Two')
firstNum = 9
if zero.draw_button():
print('Two')
firstNum = 0
if deleteNum.draw_button():
print('Two')
if checkNum.draw_button():
userNum = '사용자가 누르는 숫자 123'
counter_img = font.render('ddd', True, red)
screen.blit(counter_img, (100, 100))
screen.blit(counter_img, (280, 450))
pygame.display.update() #모든 화면 그리기 업데이트

# render함수로 사용자가 누른 숫자 출력(문자열이 아니면 str로 변환해야함)
Expand Down
236 changes: 236 additions & 0 deletions G-memoryGame.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
# the imports
import pygame
import random
from itertools import product
from pygame.locals import *
from pygame.color import Color


# the constants
FPS = 30
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 400
SQUARE_SIZE = 50
SQUARE_GAP = 10
BOARD_WIDTH = 8
BOARD_HEIGHT = 4
X_MARGIN = (SCREEN_WIDTH - (BOARD_WIDTH * (SQUARE_SIZE + SQUARE_GAP))) // 2
Y_MARGIN = (SCREEN_HEIGHT - (BOARD_HEIGHT * (SQUARE_SIZE + SQUARE_GAP))) // 2

# the board size must be even due to pairs
assert (BOARD_HEIGHT * BOARD_WIDTH) % 2 == 0, 'The board size must be even'

# the shapes
DIAMOND = 'diamond'
SQUARE = 'square'
TRIANGLE = 'triangle'
CIRCLE = 'circle'

BGCOLOR = Color('blue')

# the main function
def main():
global screen, clock

pygame.init()

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Memory game')

clock = pygame.time.Clock()

shape = (DIAMOND, SQUARE, TRIANGLE, CIRCLE)
colors = (Color('cyan'), Color('magenta'), Color('gray'), Color('chocolate'))

# There should be enough symbols
assert len(shape) * len(colors) >= BOARD_HEIGHT * BOARD_WIDTH // 2, 'There are not sufficient icons'

board = get_random_board(shape, colors)
revealed = [[False] * BOARD_WIDTH for i in range(BOARD_HEIGHT)] # keeps track of visibility of square

mouse_x = None
mouse_y = None
mouse_clicked = False
first_selection = None

running = True
start_game_animation(board)

while running:
screen.fill(BGCOLOR)
draw_board(board, revealed)

for event in pygame.event.get():
if event.type == QUIT:
running = False
elif event.type == MOUSEMOTION:
mouse_x, mouse_y = pygame.mouse.get_pos()
elif event.type == MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
mouse_clicked = True

x, y = get_pos(mouse_x, mouse_y)

if x is not None and y is not None:
if not revealed[x][y]:
if mouse_clicked:
revealed[x][y] = True
draw_square(board, revealed, x, y)

if first_selection is None:
first_selection = (x, y)
else:
pygame.time.wait(1000)
if board[x][y] != board[first_selection[0]][first_selection[1]]:
revealed[x][y] = False
revealed[first_selection[0]][first_selection[1]] = False
first_selection = None

if game_won(revealed):

game_won_animation(board, revealed)

board = get_random_board(shape, colors)
revealed = [[False] * BOARD_WIDTH for i in range(BOARD_HEIGHT)]
start_game_animation(board)

else:
draw_select_box(x, y)

mouse_clicked = False
pygame.display.update()


def game_won(revealed):
""" Returns whether all squares are found"""

return all(all(x) for x in revealed)


def game_won_animation(board, revealed):
""" Flashes background colors when the game is won"""

color1 = Color('cyan')
color2 = BGCOLOR
for i in range(10):
color1, color2 = color2, color1
screen.fill(color1)
draw_board(board, revealed)
pygame.display.update()
pygame.time.wait(300)


def start_game_animation(board):
"""Starts game by randomly showing 5 squares"""

coordinates = list(product(range(BOARD_HEIGHT), range(BOARD_WIDTH)))
random.shuffle(coordinates)

revealed = [[False] * BOARD_WIDTH for i in range(BOARD_HEIGHT)]

screen.fill(BGCOLOR)
draw_board(board, revealed)
pygame.display.update()
pygame.time.wait(500)

for sz in range(0, BOARD_HEIGHT * BOARD_WIDTH, 5):
l = coordinates[sz: sz + 5]
for x in l:
revealed[x[0]][x[1]] = True
draw_square(board, revealed, *x)
pygame.time.wait(500)
for x in l:
revealed[x[0]][x[1]] = False
draw_square(board, revealed, *x)


def get_random_board(shape, colors):
""" Generates the board by random shuffling"""

icons = list(product(shape, colors))
num_icons = BOARD_HEIGHT * BOARD_WIDTH // 2
icons = icons[:num_icons] * 2

random.shuffle(icons)
board = [icons[i:i + BOARD_WIDTH]
for i in range(0, BOARD_HEIGHT * BOARD_WIDTH, BOARD_WIDTH)]
return board


def get_coord(x, y):
""" Gets the coordinates of particular square.
The squares are number height wise and then width wise.
So the x and y are interchanged."""

top = X_MARGIN + y * (SQUARE_SIZE + SQUARE_GAP)
left = Y_MARGIN + x * (SQUARE_SIZE + SQUARE_GAP)
return top, left


def draw_icon(icon, x, y):
"""Draws the icon of (x, y) square"""

px, py = get_coord(x, y)
if icon[0] == DIAMOND:
pygame.draw.polygon(screen, icon[1],
((px + SQUARE_SIZE // 2, py + 5), (px + SQUARE_SIZE - 5, py + SQUARE_SIZE // 2),
(px + SQUARE_SIZE // 2, py + SQUARE_SIZE - 5), (px + 5, py + SQUARE_SIZE // 2)))
elif icon[0] == SQUARE:
pygame.draw.rect(screen, icon[1],
(px + 5, py + 5, SQUARE_SIZE - 10, SQUARE_SIZE - 10))
elif icon[0] == TRIANGLE:
pygame.draw.polygon(screen, icon[1],
((px + SQUARE_SIZE // 2, py + 5), (px + 5, py + SQUARE_SIZE - 5),
(px + SQUARE_SIZE - 5, py + SQUARE_SIZE - 5)))
elif icon[0] == CIRCLE:
pygame.draw.circle(screen, icon[1],
(px + SQUARE_SIZE // 2, py + SQUARE_SIZE // 2), SQUARE_SIZE // 2 - 5)


def get_pos(cx, cy):
"""Gets the square (x, y) position from the cartesian coordinates.
The squares are number height wise and then width wise.
So the cx and cy are interchanged."""

if cx < X_MARGIN or cy < Y_MARGIN:
return None, None

x = (cy - Y_MARGIN) // (SQUARE_SIZE + SQUARE_GAP)
y = (cx - X_MARGIN) // (SQUARE_SIZE + SQUARE_GAP)

if x >= BOARD_HEIGHT or y >= BOARD_WIDTH or (cx - X_MARGIN) % (SQUARE_SIZE + SQUARE_GAP) > SQUARE_SIZE or (cy - Y_MARGIN) % (SQUARE_SIZE + SQUARE_GAP) > SQUARE_SIZE:
return None, None
else:
return x, y


def draw_square(board, revealed, x, y):
"""Draws a particular square"""

coords = get_coord(x, y)
square_rect = (*coords, SQUARE_SIZE, SQUARE_SIZE)
pygame.draw.rect(screen, BGCOLOR, square_rect)
if revealed[x][y]:
draw_icon(board[x][y], x, y)
else:
pygame.draw.rect(screen, Color('gold'), square_rect)
pygame.display.update(square_rect)


def draw_board(board, revealed):
"""Draws the entire board"""

for x in range(BOARD_HEIGHT):
for y in range(BOARD_WIDTH):
draw_square(board, revealed, x, y)


def draw_select_box(x, y):
"""Draws the highlight box around the square"""

px, py = get_coord(x, y)
pygame.draw.rect(screen, Color('red'), (px - 5, py - 5, SQUARE_SIZE + 10, SQUARE_SIZE + 10), 5)


if __name__ == '__main__':
main()

0 comments on commit e360942

Please sign in to comment.