상세 컨텐츠

본문 제목

숫자 야구 버전2 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개

IT & Programming/파이썬 (Python) 공부

by 그림아이 2023. 5. 28. 09:00

본문

반응형

숫자 야구 버전2 파이썬 게임 무료 다운로드

 

□ 제목 : 숫자 야구 버전2 (Baseball With Numbers Version2)

 언어 : Python (파이썬)

 제작 : 알고리즘 작성 → ChatGPT에 제작 요청 → 디버깅 및 검토 → ChatGPT에 보완 요청 → 완성

 공개 : 2023년 5월 28일, 광고 없음

 형식 : EXE 파일

 파일 다운로드 : Baseball_with_numbers_Version2.exe

Baseball_with_numbers_Version2.exe
9.50MB

※ 만약 게임이 실행이 안 되시거나 문제가 있으시면, 이곳에 댓글을 남겨주시거나 grimeye.myw@gmail.com으로 메일 주시면 최선을 다해서 답변 드리겠습니다.

 

숫자 야구 버전2 파이썬 게임 무료 다운로드

 

반응형

 

숫자 야구 버전2 파이썬 게임을 개발하고 공개하며

 

사랑하는 딸아이가 중학교 수업시간에 숫자 야구게임을 했다는 얘기를 듣고 “ChatGPT와 파이썬으로 한 번 만들어볼까?” 하는 생각이 들어 만들게 된 게임 두번째 버전입니다.

 

제가 어렸을 때는 1부터 9까지 3자리 숫자만 가지고 숫자 야구를 했는데 딸아이는 0부터 9까지 4자리 숫자를 가지고 했다고 합니다. 그래서 일단 세자리 버전을 하나 만들었으니, 이번에는 네자리 버전을 만들어 딸아이가 심심할 때 가지고 놀 수 있게 만들어주고 싶었습니다. 그렇게 만든 프로그램을 모두에게 무료로 공개하고자 합니다. 게다가 광고도 없습니다.

 

만든 과정을 간단히 설명하면, 일단 ChatGPT에게 제시할 대화창 디자인부터 했고, 가장 중요한 볼과 스트라이크에 대한 개념 정의를 제시했습니다. 사실 그게 전부입니다. 아래 알고리즘은 맨 처음 ChatGPT에게 제시한 알고리즘입니다. 이후 약 두 시간 가량 동안 수많은 보완 작업을 거쳐야 했습니다. 자릿수가 3자리에서 4자리로 늘어나니 ChatGPT의 시행착오가 대폭 증가했습니다. 거의 다 된 상태에서 작은 부분을 변경해달라고 했을 뿐인데 대화창의 디자인을 완전히 다 바꿔 버리기도 하고, 사용자에게 볼과 스트라이크에 대한 피드백을 주는 과정에서 오류가 발생하기도 했습니다.

 

그래도 제가 코딩했으면 미천한 제 실력에 이틀 정도 걸렸을 텐데 한시간 만에 완성했으니 불평 하나 없이 대신 코딩해주는 조수로서는 훌륭하다고 생각합니다. 참고로 여기에서는 한글로 알고리즘을 썼지만 ChatGPT에게는 구글 번역기를 통해 영어로만 코딩을 요청했습니다.

 

본 글의 순서는 제가 ChatGPT에게 요청했던 알고리즘, 수많은 보완을 거쳐 완성된 최종 파이썬 소스코드 전문, 최종 숫자 야구 게임 다운로드의 순서로 진행됩니다. 다른 건 모르겠고 게임의 다운로드가 필요하다 하시는 분들은 본문 맨 위로 스크롤 하시면 다운로드 받으실 수 있습니다.

 

즐겜하세요!!!

 

 

ChatGPT에게 요청한 파이썬 알고리즘 및 게임의 규칙

 

1. 타일은 20행에 4열로 되어 있고 옆에는 "Submit" 버튼이 있다. 타일은 정사각형이고 사용자가 입력 가능한 타일이다.

2. 맨 아래에는 "New Game", "Quit", "How to Play" 버튼이 일렬로 나란히 있다. "New Game"은 새로운 게임을 시작하기 위해 게임을 완전히 초기화하고, "Quit" 버튼은 게임을 종료하고 대화창을 닫고, "How to Play" 버튼은 특정 웹사이트로 이동할 수 있게 해준다.

3. "Submit" 버튼을 누를 때마다 버튼의 오른쪽에 결과를 보여준다.

4. 타일에는 숫자만 입력 되어야 하고 입력하자마자 다음 타일로 자동으로 이동한다.

5. 타일에 빈 곳이 있거나, 문자가 입력되어 있거나, 같은 숫자가 두 번 입력되어 있거나 한 채로 "Submit" 버튼을 누르면 "It's not completed."라는 경고창을 띄우고 입력이 완료될 때까지 대기한다.

6. 타일에는 0부터 9까지의 숫자만 입력할 수 있고 중복은 허용하지 않는다. 예를 들면, 1111 또는 1221은 허용되지 않는다. 정답 4자리 숫자는 게임이 실행되자마자 컴퓨터가 랜덤으로 추출한다.

7. 만약 랜덤으로 추출한 정답이 1597라고 가정하고, 사용자가 1953라고 입력하면 "2B 1S"라고 답하고, 2846라고 입력하면 "0B 0S"라고 답한다. 숫자와 위치가 모두 일치하면 "S", 숫자는 일치하는데 위치가 다르면 "B"라고 답한다.

8. 타일의 맨 아래에는 studyingengineer.tistory.com 이라는 링크를 삽입하고 마우스로 누를 경우 인터넷 브라우저 새창이 열리면서 이동할 수 있도록 한다.

9. 세자리 숫자의 정답을 모두 맞추면 “You won!!!” 이라는 경고창을 보여주고, 20번의 시도에도 정답을 맞히지 못하면 “You lost.”라는 경고창과 함께 정답 숫자를 함께 출력한다.

 

 

완성된 파이썬 소스 코드

 

#Baseball_with_numbers_Version2.py

import webbrowser
import tkinter as tk
from tkinter import messagebox
import random
 
class NumberBaseballGame:
    def __init__(self, master):
        self.master = master
        self.master.title('Baseball with Numbers Version2')
        self.entries = []
        self.answer = [str(i) for i in random.sample(range(0, 10), 4)]
        for i in range(20):
            row_entries = [tk.Entry(master, width=2, font=("Helvetica", 20), justify='center') for _ in range(4)]
            for j in range(4):
                row_entries[j].grid(row=i, column=j)
                row_entries[j].bind("<KeyRelease>", self.handle_keypress)
            row_entries.append(tk.Label(master, text='', font=("Helvetica", 20))) # type: ignore
            row_entries[4].grid(row=i, column=5)
            self.entries.append(row_entries)
        for i in range(20):
            self.entries[i].append(tk.Button(master, text='Submit', command=lambda i=i: self.check(i)))
            self.entries[i][5].grid(row=i, column=4)
        self.entries[0][5].config(state='normal')
        for e in self.entries[0][:4]:
            e.config(state='normal')
        self.new_game_button = tk.Button(master, text='New Game', command=self.new_game)
        self.quit_button = tk.Button(master, text='Quit', command=self.master.quit)
        self.how_to_play_button = tk.Button(master, text='How to Play', command=self.open_url)
        self.new_game_button.grid(row=21, column=0, sticky='EW')
        self.quit_button.grid(row=21, column=1, sticky='EW')
        self.how_to_play_button.grid(row=21, column=2, sticky='EW')
        self.link = tk.Label(master, text="studyingengineer.tistory.com", font=("Helvetica", 10), cursor="hand2")
        self.link.grid(row=22, column=0, columnspan=3)
        self.link.bind("<Button-1>", lambda e: self.callback("http://studyingengineer.tistory.com"))
 
    def handle_keypress(self, event):
        if len(event.widget.get()) > 0:
            next_entry = self.master.focus_get().tk_focusNext()
            if next_entry:
                next_entry.focus_set()
 
    def callback(self, url):
        webbrowser.open_new(url)
 
    def open_url(self):
        webbrowser.open_new('http://studyingengineer.tistory.com/1303')
 
    def check(self, row):
        guess = [e.get() for e in self.entries[row][:4]]
        if '' in guess:
            messagebox.showwarning("Warning", "It's not completed.")
            return
        if len(set(guess)) < 4:
            messagebox.showwarning("Warning", "Same number detected. Please enter different numbers.")
            return
 
        strikes = sum((g == a for g, a in zip(guess, self.answer))) # type: ignore
        balls = len(set(guess) & set(self.answer)) - strikes
        self.entries[row][4]['text'] = f'{balls}B {strikes}S'  
 
        if strikes == 4:
            messagebox.showinfo("Game Over", "You won!!!")
        elif row < 19:
            for e in self.entries[row][:4]:
                e.config(state='disabled')
            self.entries[row][5].config(state='disabled')
            for e in self.entries[row + 1][:4]:
                e.config(state='normal')
            self.entries[row + 1][5].config(state='normal')
        else:
            messagebox.showinfo("Game Over", f"You lost. The answer was {''.join(self.answer)}")
 
    def new_game(self):
        self.master.destroy()
        new_root = tk.Tk()
        new_game = NumberBaseballGame(new_root)
        new_root.mainloop()
 
    def how_to_play(self):
        messagebox.showinfo("How to Play", "Enter four different numbers from 0 to 9. If the number and its position "
                                           "both are correct, it's a 'strike'. If the number is correct but the position "
                                           "is not, it's a 'ball'. You have 20 attempts to guess the answer. Good luck!")
 
root = tk.Tk()
game = NumberBaseballGame(root)
root.mainloop()

 

 

참고할만한 다른 자료들

 

숫자 야구 버전1 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)

 

숫자 야구 버전1 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙

숫자 야구 버전1 파이썬 게임 무료 다운로드 □ 제목 : 숫자 야구 버전1 (Baseball With Numbers Version1) □ 언어 : Python (파이썬) □ 제작 : 알고리즘 작성 → ChatGPT에 제작 요청 → 디버깅 및 검토 → ChatGP

studyingengineer.tistory.com

숫자 야구 버전3 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)

 

숫자 야구 버전3 파이썬 게임 무료 다운로드: 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙

숫자 야구 버전3 파이썬 게임 무료 다운로드 □ 제목 : 숫자 야구 버전3 (Baseball With Numbers Version3) □ 언어 : Python (파이썬) □ 제작 : 알고리즘 작성 → ChatGPT에 제작 요청 → 디버깅 및 검토 → ChatGP

studyingengineer.tistory.com

Wordle (워들) 파이썬 게임 무료 공개 (광고 없음): 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규칙 등 공개 (tistory.com)

 

Wordle (워들) 파이썬 게임 무료 공개 (광고 없음): 파이썬 소스 코드, ChatGPT와의 제작 과정, 게임 규

Wordle (워들) 게임 무료 공개 제목 : Wordle 게임 언어 : Python (파이썬) 제작 : 알고리즘 작성 → ChatGPT에 제작 요청 → 디버깅 및 검토 → ChatGPT에 보완 요청 → 완성 공개 : 2023년 5월 14일, 광고 없음

studyingengineer.tistory.com

[Python] 구구단 출력하기 파이썬 프로그램 예제 (tistory.com)

 

[Python] 구구단 출력하기 파이썬 프로그램 예제

이번 시간에는 파이썬으로 구구단을 출력해주는 프로그램을 만들어 보겠습니다. 구구단은 보통 1~9까지 숫자를 각각 1~9까지 곱해서 곱셈을 외우고 공부하기 쉽게 만든 것을 의미합니다. 그런데

studyingengineer.tistory.com

[Python] 윤년인지 여부 확인 파이썬 프로그램 예제 (tistory.com)

 

[Python] 윤년인지 여부 확인 파이썬 프로그램 예제

오늘은 입력한 연도가 윤년인지 아닌지 확인해주는 프로그램을 만들어 보겠습니다. 먼저 윤년에 대해 정확히 알고 있어야 합니다. 프로그램 언어를 공부하면서 질문을 받아 보면 많은 분들이

studyingengineer.tistory.com

[Python] 파이썬으로 각종 단위 변환 프로그램 예제 (tistory.com)

 

[Python] 파이썬으로 각종 단위 변환 프로그램 예제

미국과 영국은 독특한 단위 체계를 사용하는 것으로 유명합니다. 전세계가 공용으로 사용하고 있는 SI (International System of Units) 단위 체계, 즉 미터법을 받아들이지 않고 버티는 것으로 유명합니

studyingengineer.tistory.com

[Python] 1에서 100까지 숫자들 중 소수 (Prime Number)만 찾아서 출력하기 파이썬 프로그램 예제 (tistory.com)

 

[Python] 1에서 100까지 숫자들 중 소수 (Prime Number)만 찾아서 출력하기 파이썬 프로그램 예제

무한히 많은 숫자들 중 가장 신비로운 수 중의 하나가 바로 소수입니다. 영어로 Prime Number라고 하고, 1과 자기 자신을 제외한 어떤 수로도 나눠지지 않는 수를 말합니다. 심지어 세상 모든 수는

studyingengineer.tistory.com

 

728x90
반응형

관련글 더보기

댓글 영역