質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1079閲覧

ノベルゲーム制作エンジン:強制的に終了してしまいます

CoC_M

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/10 08:27

前提・実現したいこと

ノベルゲームの制作

ここに質問の内容を詳しく書いてください。
pythonでノベルゲームを制作しているのですが、起動後指定したボタンを押すと強制的に閉じられてしまいます。
一番最初に表示させた画面でシステムを完結・終了させてしまっているんだと思いますが…正直よくわかりません。
助けてください。

発生している問題・エラーメッセージ

エラーメッセージ ```なし。起動においては問題なし。 ### 該当のソースコード # -*- coding: utf8 -*- # novel.pyw - ノベルゲームエンジン # Yo Yamanoguchi # v.1.0 2018.10.22 HSP版ノベルゲームエンジンから移植 import pygame from pygame.locals import * import math import sys import pygame.mixer import random from button import Button SFW = 800 # 画面(SURFACE)の幅・高さ SFH = 600 # 場面クラス class Scene(): def __init__(self, imgfile, message, choice, bgm): self.image = pygame.image.load('img/' + imgfile) # シーンの画像 self.meslines = message.split(',') # メッセージ(行分け後) self.choice = choice # 選択肢のリスト self.bgm = bgm # BGM・効果音のファイル self.font = pygame.font.Font("ipag.ttf", 20) # 日本語表示用フォント self.font.set_bold(True) # メッセージは太字で表示 # SceneのIDはScenesリストのインデックスで代用 # シーンを表示 def disp(self, SURFACE): SURFACE.blit(self.image, (0, 0)) # シーンの画像を表示 for i, line in enumerate(self.meslines): # メッセージを行毎に表示 mesimage = self.font.render(line, True, (255, 255, 255)) SURFACE.blit(mesimage, (8, 470 + i * 24)) if len(self.bgm): # BGM・効果音を再生 pygame.mixer.music.load('sound/' + self.bgm) pygame.mixer.music.play() cb = list() # 選択肢からボタンを作成 cl = len(self.choice) # 選択肢の数 for i, cc in enumerate(self.choice): x = (SFW - cl * 120) / 2 + (120 * i) # ボタン位置 x y = SFH - 50 # ボタン位置 cb.append(Button()) cb[i].create(SURFACE, x, y, 0, 40, 80, cc[0], bg = (107,142,35)) while True: # イベント取得待ち pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: # 画面右上の終了ボタン pygame.quit() elif event.type == MOUSEBUTTONDOWN: # マウスボタンのクリック for i, bt in enumerate(cb): # 各選択肢をチェック if bt.pressed(pygame.mouse.get_pos()): print("button[{}] pressed.".format(i)) return self.choice[i][1] # 次に表示されるScene番号を返す # ゲーム実行 def main(): sceneNo = 0 # シナリオファイル読み込み前のシーンNo. Scenes = list() # 全シーンのリスト pygame.init() SURFACE = pygame.display.set_mode((SFW, SFH)) # シナリオファイルを読んで各Sceneに展開、Scenesリストに格納 with open('シナリオ.txt', 'r') as sf: while True: line = sf.readline() # シーン番号は読み飛ばす if not line: # シナリオファイルの[EOF] break; imgfile = sf.readline().rstrip("\n") # 改行コードを削除 message = sf.readline().rstrip("\n") choicestr = sf.readline().rstrip("\n") # 選択肢行から選択肢リストを作成 choice = list() if len(choicestr): tmpcl = choicestr.split(',') it = iter(tmpcl) # リストの要素を2つ1組で処理する for label, jump in zip(it, it): choice.append([label, int(jump)]) # 選択肢リストはリストのリスト else: choice.append(['▼', sceneNo + 1]) # 選択肢行がないときの処理 bgm = sf.readline().rstrip("\n") scene = Scene(imgfile, message, choice, bgm) # Sceneオブジェクトを作成 Scenes.append(scene) # Scenesリストに追加 sceneNo += 1 # シーンNo.をインクリメント # シナリオファイルは自動的にcloseする(with関数) # プレイ開始 scene = 0 # ゲームスタート時のシーンNo. while True: scene = Scenes[scene].disp(SURFACE) # そのシーンを表示 if scene == 999: # シーンNo.が「999」なら終了 break elif nextName == '60': dice = random.randint(1, 2) if dice == 1: sceneName = '61' else: sceneName = '76' else: sceneName = nextName # 選択肢ボタンに従う場合 # Step3: pygame終了 pygame.quit() # ゲーム終了 if __name__ == "__main__": main() ```python ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

実際に使用するフォルダが欲しい場合は(kuremon135@gmail.com)にご一報ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2020/01/10 08:29

質問を編集して、コードは<code>ボタンで挿入できるコードブロックの中に入れるようにしてください。 ```python コード ``` のように。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問