과거에 파이썬을 공부하려다가 포기했습니다.
챗 지피티가 간단한 코딩은 해주더라고요.
초등학생들의 수학시간에 사용할 게임을 만들어보고자 시도했습니다.
대략의 게임내용은 루미큐브 형식으로
초등학생이 나누기를 공부를 할 수 있는 게임입니다.
카드를 15장 가지고 있고, 그 중에 나누어지는 수, 나누는 수, 몫 이 세가지를 한 묶음으로 해서 바닥에 내려놓는 프로그램을 시도했습니다.
15개의 숫자 중에서 세 개를 클릭하면 맞으면 그 세 개의 숫자가 손에 들고 있는 것에서 사라지는 것입니다.
챗지피티에게 위 상황을 설명하였더니 몇가지 수정하더니만 코드를 만들어주었습니다.
그것을 메모장에 붙여서 저장한 다음 실행시키니 보드게임이 실행되는 것이 아니고 바로 창이 사라집니다.
제가 하는 방법으로는 보드게임이 안 만들어지는 건지요? 완전초보라서 어디 물어볼 곳이 없어서 여기에 여쭙습니다.
챗지피티가 불러준 코드는 아래에 첨부합니다.
import random
import time
class FinalizedDivisionRummikub:
def __init__(self):
self.deck = self.generate_numbers()
self.player1_hand = []
self.player2_hand = []
self.shared_board = []
self.turn = 1 # Player 1 starts
self.no_progress_turns = 0 # Tracks consecutive turns with no progress
self.init_game()
def generate_numbers(self):
# Generate 60 random numbers (decimal and integers)
return [round(random.uniform(1, 20), 1) for _ in range(60)]
def deal_cards(self):
# Deal 15 cards to each player
self.player1_hand = random.sample(self.deck, 15)
self.player2_hand = random.sample([num for num in self.deck if num not in self.player1_hand], 15)
def init_game(self):
self.deal_cards()
print("게임 시작!")
self.play_game()
def display_state(self):
print(f"공유 보드: {', '.join(map(str, self.shared_board)) if self.shared_board else '비어있음'}")
print(f"Player 1 남은 카드: {len(self.player1_hand)}장, Player 2 남은 카드: {len(self.player2_hand)}장\n")
def is_valid_set(self, dividend, divisor, quotient):
try:
return round(dividend / divisor, 2) == round(quotient, 2)
except ZeroDivisionError:
return False
def play_turn(self, player_name, player_hand):
print(f"{player_name}의 차례입니다. (30초 제한)")
random.shuffle(player_hand) # Shuffle the hand to make exploration random
attempts = 0
while attempts < 10: # Limit to 10 attempts for efficiency
attempts += 1
if len(player_hand) < 3:
break
selected_cards = random.sample(player_hand, 3)
dividend, divisor, quotient = selected_cards
if self.is_valid_set(dividend, divisor, quotient):
self.shared_board.extend([dividend, divisor, quotient])
print(f"{player_name}가 {dividend}, {divisor}, {quotient}을(를) 배치했습니다!")
for card in selected_cards:
player_hand.remove(card)
self.no_progress_turns = 0 # Reset no progress counter
return True # Progress was made
print(f"{player_name}가 배치할 수 있는 카드가 없습니다. 턴 종료.")
return False # No progress made
def play_game(self):
while self.player1_hand and self.player2_hand:
self.display_state()
if self.turn == 1:
if not self.play_turn("Player 1", self.player1_hand):
self.no_progress_turns += 1
self.turn = 2
else:
if not self.play_turn("Player 2", self.player2_hand):
self.no_progress_turns += 1
self.turn = 1
# End game if no progress for 4 consecutive turns
if self.no_progress_turns >= 4:
print("양측 모두 진행할 수 있는 조합이 없어 게임을 종료합니다.")
break
self.display_state()
if not self.player1_hand and not self.player2_hand:
print("양쪽 모두 카드를 모두 사용했습니다! 무승부입니다!")
else:
winner = "Player 1" if not self.player1_hand else "Player 2"
print(f"게임 종료! {winner}가 승리했습니다!")
# Start the finalized game
FinalizedDivisionRummikub()
파이썬 설치는 되어 있는게 맞나요? 터미널에서 실행 시키신거에요?
메모장 코딩도 못할건 없지만 pycharm 같은 ide를 쓰시는걸 추천드리고 싶네요
아님 주피터 노트북을 검색하시거나 (이게 사용은 더 쉬운데 설치가 좀 더 어려울거에요)
파일의 가장 아래에 input() 을 추가하시면 창이 바로 닫히지 않기 때문에 결과가 보일 것입니다.
아니면 명령창을 열고 "python filename.py"를 실행하면 됩니다.
단, 이 코드에는 사용자 입력을 받는 부분이 없고 랜덤으로 생성하도록 되어 있으므로 원하시는 목적에 맞지는 않아 보입니다.