파이썬을 사용한 초보 코딩: 주사위 굴리기 시뮬레이터 개발
파이썬 프로젝트 설정
이것은 꽤 간단한 설정이 될 것입니다.
이미 파이썬으로 코딩하는 Visual Studio를 설정하는 방법을 설명했으니,
기본 설정에 이를 사용하겠습니다.
가능한 한 간단하게 진행할 테니 수입부터 시작하겠습니다
import tkinter as tk
from tkinter import ttk
import random
이전에 간단한 비용 추적기를 만들 때 Tkinter를 사용했는데,
이 경우 가장 가벼운 솔루션입니다.
라이브러리를 통해 간단하고 현대적이면서도 스타일리시한 GUI 인터페이스를 만들 수 있습니다.
랜덤 라이브러리는 다이 롤의 본질인 두 값 사이의 숫자를 무작위로 맞추는 기능을 가능하게 합니다.
조금 더 예쁘게 만들어 보겠습니다.
주사위 얼굴 디자인 고려 사항
우리는 RPG 주사위 세트를 시뮬레이션할 것입니다.
스타일적인 감각을 위해, 저는 Tkinter를 사용한 ASCII 아트 핸들링을 시연하기 위해
4면 주사위(d4)와 6면 주사위(d6)를 조금 화려하게 만들었습니다.
def __init__(self, root):
self.root = root
self.root.title("Dice Simulator")
self.root.geometry("400x500")
# Dice face configurations using ASCII art
self.d4_faces = {
1: " ╱▲╲\n ╱ 1 ╲\n╱ ╲\n‾‾‾‾‾‾‾",
2: " ╱▲╲\n ╱ 2 ╲\n╱ ╲\n‾‾‾‾‾‾‾",
3: " ╱▲╲\n ╱ 3 ╲\n╱ ╲\n‾‾‾‾‾‾‾",
4: " ╱▲╲\n ╱ 4 ╲\n╱ ╲\n‾‾‾‾‾‾‾"
}
self.d6_faces = {
1: "┌─────────┐\n│ │\n│ ● │\n│ │\n└─────────┘",
2: "┌─────────┐\n│ ● │\n│ │\n│ ● │\n└─────────┘",
3: "┌─────────┐\n│ ● │\n│ ● │\n│ ● │\n└─────────┘",
4: "┌─────────┐\n│ ● ● │\n│ │\n│ ● ● │\n└─────────┘",
5: "┌─────────┐\n│ ● ● │\n│ ● │\n│ ● ● │\n└─────────┘",
6: "┌─────────┐\n│ ● ● │\n│ ● ● │\n│ ● ● │\n└─────────┘"
}
GUI가 훨씬 더 매력적일 것 같아서 이 제품을 선택했습니다.
퀴즈 앱을 만들 때는 단말기를 고수했지만, 이 앱에서 약간의 감각을 얻고 싶습니다.
이 코드에 대해 너무 걱정하지 마세요. 실제 d6와 같은 얼굴을 가진 d6를 표시하는 것뿐이며,
d4도 마찬가지입니다.
이것은 또한 우리 GUI의 시작이며, 창 상단에 "Dice Simulator" 앱 제목이 표시됩니다.
입력을 어떻게 할지 살펴보겠습니다.
사용자가 굴리고 싶은 주사위의 개수와 종류를 입력할 수 있는 장소를 원합니다.
간단히 하기 위해 주사위를 5로 최대화할 예정이므로 그 이상의 것은 다루지 않겠습니다.
따라서 사용자 인터페이스에는 주사위 유형에 대한 주사위 선택기와 여러 개의 주사위 항목이 있습니다.
저는 또한 롤에 히스토 시스템을 도입하고 싶습니다.
그래서 그것을 아래에 넣고 새로운 주사위 세트를 굴릴 때마다 업데이트하겠습니다.
코드 스니펫은 다음과 같이 보여야 합니다:
# Create and configure the main frame
self.main_frame = ttk.Frame(self.root, padding="10")
self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# Number of dice selector
ttk.Label(self.main_frame, text="Number of Dice:").grid(row=0, column=0, pady=5)
self.num_dice = ttk.Spinbox(self.main_frame, from_=1, to=5, width=5)
self.num_dice.set(1)
self.num_dice.grid(row=0, column=1, pady=5)
# Dice type selector
ttk.Label(self.main_frame, text="Dice Type:").grid(row=1, column=0, pady=5)
self.dice_type = ttk.Combobox(self.main_frame, values=["d4", "d6", "d8", "d12", "d20"], width=5)
self.dice_type.set("d6")
self.dice_type.grid(row=1, column=1, pady=5)
# Roll button
self.roll_button = ttk.Button(self.main_frame, text="Roll Dice!", command=self.roll_dice)
self.roll_button.grid(row=2, column=0, columnspan=2, pady=10)
# Results display
self.result_text = tk.Text(self.main_frame, height=15, width=40, font=('Courier', 10))
self.result_text.grid(row=3, column=0, columnspan=2, pady=10)
# History display
ttk.Label(self.main_frame, text="Roll History:").grid(row=4, column=0, columnspan=2, pady=5)
self.history_text = tk.Text(self.main_frame, height=5, width=40)
self.history_text.grid(row=5, column=0, columnspan=2, pady=5)
self.roll_history = []
# Create and configure the main frame
self.main_frame = ttk.Frame(self.root, padding="10")
self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
# Number of dice selector
ttk.Label(self.main_frame, text="Number of Dice:").grid(row=0, column=0, pady=5)
self.num_dice = ttk.Spinbox(self.main_frame, from_=1, to=5, width=5)
self.num_dice.set(1)
self.num_dice.grid(row=0, column=1, pady=5)
# Dice type selector
ttk.Label(self.main_frame, text="Dice Type:").grid(row=1, column=0, pady=5)
self.dice_type = ttk.Combobox(self.main_frame, values=["d4", "d6", "d8", "d12", "d20"], width=5)
self.dice_type.set("d6")
self.dice_type.grid(row=1, column=1, pady=5)
# Roll button
self.roll_button = ttk.Button(self.main_frame, text="Roll Dice!", command=self.roll_dice)
self.roll_button.grid(row=2, column=0, columnspan=2, pady=10)
# Results display
self.result_text = tk.Text(self.main_frame, height=15, width=40, font=('Courier', 10))
self.result_text.grid(row=3, column=0, columnspan=2, pady=10)
# History display
ttk.Label(self.main_frame, text="Roll History:").grid(row=4, column=0, columnspan=2, pady=5)
self.history_text = tk.Text(self.main_frame, height=5, width=40)
self.history_text.grid(row=5, column=0, columnspan=2, pady=5)
self.roll_history = []
이것은 주사위 굴리기 앱의 기본 UI 설정을 제공합니다. 롤 시뮬레이션으로 넘어가 보겠습니다.
컴퓨터를 통해 주사위 굴리기
RPG 비디오 게임을 해본 적이 있다면 시뮬레이션 주사위 굴림을 경험해 본 적이 있을 것입니다.
주사위 모양은 테이블탑 RPG의 플레이 방식, 썰물과 썰물, 캐릭터에 어떤 일이 일어나는지를 나타냅니다.
다이 롤은 최소값과 최대값 두 값 사이에서 생성되는 무작위 숫자입니다.
파이썬에서는 랜덤 라이브러리를 사용하여 이러한 롤을 시뮬레이션할 수 있습니다.
코드는 다음과 같습니다:
def roll_single_die(self, sides):
"""Simulate rolling a single die with given number of sides."""
return random.randint(1, sides)
def get_dice_face(self, value, dice_type):
"""Get ASCII art representation of a die face."""
if dice_type == 4:
return self.d4_faces.get(value, str(value))
elif dice_type == 6:
return self.d6_faces.get(value, str(value))
return str(value)
def roll_dice(self):
"""Handle the dice rolling action and update the display."""
try:
num_dice = int(self.num_dice.get())
dice_type = int(self.dice_type.get()[1:]) # Extract number from 'd6', 'd20' etc.
# Clear previous results
self.result_text.delete(1.0, tk.END)
# Roll the dice and calculate total
rolls = [self.roll_single_die(dice_type) for _ in range(num_dice)]
total = sum(rolls)
# Display results
if dice_type in [4, 6]: # Show ASCII art for d4 and d6
for roll in rolls:
self.result_text.insert(tk.END, self.get_dice_face(roll, dice_type) + "\n")
else:
roll_str = ", ".join(str(roll) for roll in rolls)
self.result_text.insert(tk.END, f"Rolls: {roll_str}\n")
self.result_text.insert(tk.END, f"\nTotal: {total}")
# Update history
roll_record = f"{num_dice}d{dice_type}: {rolls} = {total}"
self.roll_history.append(roll_record)
if len(self.roll_history) > 5: # Keep only last 5 rolls
self.roll_history.pop(0)
# Update history display
self.history_text.delete(1.0, tk.END)
for record in self.roll_history:
self.history_text.insert(tk.END, record + "\n")
except ValueError:
self.result_text.delete(1.0, tk.END)
self.result_text.insert(tk.END, "Please enter valid numbers")
이것은 주사위 굴림을 시뮬레이션하기 위한 기본 코드를 제공합니다.
프로그램을 실행하려면 핵심 기능을 호출하기만 하면 됩니다:
if __name__ == "__main__":
root = tk.Tk()
app = DiceSimulator(root)
root.mainloop()
그렇게 하면 됩니다. 이제 주사위 굴림 시뮬레이터가 출시되었습니다!
업그레이드 및 업데이트에 대한 제안
앱을 실행할 때는 다음과 같은 것을 확인해야 합니다:
그 앱에는 몇 가지 제한 사항이 있어서 제가 의도적으로 당신에게 확장할 수 있는 무언가를 제공하려고 놓쳤습니다.
d10 또는 d100은 지원되지 않습니다
(2d10 롤링 또는 1d100 롤링으로 시뮬레이션할 수 있습니다).
앱을 확장하려면 직접 추가할 수 있습니다.
또한, 이를 네트워크로 연결된 주사위 롤러로 확장하여 약간의 스킨으로 UI를 조금 더 예쁘게 만들 수 있습니다.
평소처럼 이 앱의 모든 코드는 제 GitHub에서 사용할 수 있습니다.
코드나 제 접근 방식에 대한 의견은 언제든지 환영합니다.
2019.08.27-파이썬으로, 네이버 자동로그인 하는 프로그램 짜기
파이썬으로, 네이버 자동로그인 하는 프로그램 짜기
파이썬으로, 네이버 자동로그인 하는 프로그램 짜기 2017/04/17 - 파이썬Python을 사용해 보자! 다운로드 및 설치 네이버 자동 로그인 프로그램을 만들어 보았습니다. 오랜만에 파이썬을 건드려보니
kanonxkanon.tistory.com
2021.06.04-구글 크롬의 CPU 사용량과 배터리 전원을 절약하는 방법
2021.04.20-엑셀 F2키로 셀 편집이 되지 않을때 해결 방법
엑셀 F2키로 셀 편집이 되지 않을때 해결 방법
엑셀 F2키로 셀 편집이 되지 않을때 해결 방법 한 번 입력 한 내용에 오류가 있어서 다시 입력하려면 새로 입력 한 데이터로 덮어쓰려는 것이 효율이 떨어지므로 셀에 입력 한 데이터는 다시 편
kanonxkanon.tistory.com
2025.01.04-파이썬을 계산기로 사용해야 하는 이유(및 시작하는 방법)
-
'IT 이것저것 > 파이썬python' 카테고리의 다른 글
파이썬 기초 배우기: 간단한 가계부 및 비용 추적기를 코딩 해 보기 (0) | 2025.02.04 |
---|---|
초보자를 위한 파이썬 프로그래밍: 간단한 퀴즈 앱을 만들자 (0) | 2025.02.03 |
파이썬을 계산기로 사용해야 하는 이유(및 시작하는 방법) (1) | 2025.02.01 |
파이썬으로, 네이버 자동로그인 하는 프로그램 짜기 (0) | 2019.08.28 |
파이썬python 본격적으로 학생 성적 관리 프로그램을 만들어 보자! (1) | 2017.06.19 |
댓글