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

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

ただいまの
回答率

90.53%

  • JavaScript

    16318questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • C#

    7064questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Python 3.x

    6290questions

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

  • Windows 10

    936questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • Linux Mint

    30questions

    Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。

pythonで書いたミニゲームをGUI可したい。おすすめのライブラリやソフト

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 184

Sample_Test

score 126

pythonで書いたミニゲームをGUI可したい。ので、
おすすめのライブラリやソフトを教えて下さい。

理想としては、配列とMAPとの動機が簡単で低スペックでも動作可能が良いです。
学習コストが低いモノだと助かります。

PCスペック
メモリー: 3.8 GiB
プロセッサー Intel® Core™ i3-2120 CPU @ 3.30GHz × 4

GUI化したいミニゲーム

"""
ポイント貯め
25ポイント以上でゲーム終了

ブロックの種類 3種類+説明

1A
自分のターンでサイコロの値が1か3なら+1ポイント増える
内部構造 MAPに配置しているブロック数*1

2A 2A
自分のターンでサイコロの値が2か4なら+2ポイント増える
内部構造 MAPに配置している(ブロック数/2)*2

3A 3A 3A
誰のターンでもOK サイコロの値が3か6なら+1ポイント増える
内部構造 MAPに配置している(ブロック数/3)*1


ルール
交互に3種類の中からブロックを選び配置して行く
一度配置されたブロックは動かない
ブロックの置き換え不可能
配置位置がMAPから外の場合は無効
ブロックの種類が0,1,2 以外なら失敗扱いで次のユーザーへ
MAP上が全て埋まってもポイント達成まで、ターンが流れる
横に置く場合は0 縦に置く場合1


攻略
ポイント効率を考えると2番目のブロックが最適です。
長期戦を狙い相手の邪魔をしたいなら3番目のブロックが都合が良いでしょう。
何処にでも配置できる1番目のブロックは終盤で配置して行く形が定石です。


入力形式
横 縦 ブロックの種類 横か縦
0 0 0 0

"""





#sleep(0.2)
import random
import collections
from time import sleep
from pprint import pprint



# ターン判定用
saikoro=0
# ユーザースコア
Demo_Use1=0
Demo_Use2=0
# ユーザー入力用 配列
Horizontal_or_Vertical=[]
# サイコロの値を格納する配列
Dice=[i for i in range(1,6)]
# ユーザー別 ブロックの種類など
r1=[['1A'],['2A','2A'],['3A','3A','3A']]
r2=[['1B'],['2B','2B'],['3B','3B','3B']]
# MAP 5*5=25マス
l = [['0' for i in range(5)] for j in range(5)]



# 横 side ユーザーA Use1
def Sample_Demo_New_Bloku2(x,y,z):
    for i in range(len(z)):
        if l[x][y+i]=='0':
            l[x][y+i]=r1[r1.index(z)][i]
        else:pass

#Sample_Demo_New_Bloku2(0,0,r1[1])

# 縦 Vertical ユーザーA Use1
def Sample_Demo_New_Bloku3(x,y,z):
    for i in range(len(z)):
        if l[x+i][y]=='0':
            l[x+i][y]=r1[r1.index(z)][i]
        else:pass

#Sample_Demo_New_Bloku3(0,0,r1[1])



# 横 side ユーザーB Use2
def Sample_Demo_New_Bloku4(x,y,z):
    for i in range(len(z)):
        if l[x][y+i]=='0':
            l[x][y+i]=r2[r2.index(z)][i]
        else:pass

#Sample_Demo_New_Bloku2(0,0,r1[1])

# 縦 Vertical ユーザーB Use2
def Sample_Demo_New_Bloku5(x,y,z):
    for i in range(len(z)):
        if l[x+i][y]=='0':
            l[x+i][y]=r2[r2.index(z)][i]
        else:pass

#Sample_Demo_New_Bloku3(0,0,r1[1])






# 各MAP要素の合計
def Sample_Demo_New_Bloku_Initialization():
    c=[]
    for i in range(len(l)):
        c.append(collections.Counter(l[i]))
    for j in range(len(c)-1):
        c[0]+=c[j+1]
    return c[0]

#T=Sample_Demo_New_Bloku_Initialization()
#print(T.keys(),T.values())

# サイコロの値
def Sample_Demo_New_Bloku_Random_Number():
    global Dice
    return random.choice(Dice)

#Q=Sample_Demo_New_Bloku_Random_Number()
#print(Q)




# MAPからポイント判定用素材の準備
def Sample_Demo_New_Bloku_Scoring():
    global Demo_Use1,Demo_Use2
    for k,v in T.items():
        #print(k,v)
        if Q==1 or Q==3:
            if saikoro%2==1:
                if k=='1A':
                    Demo_Use1+=1*v
            if saikoro%2==0:
                if k=='1B':
                    Demo_Use2+=1*v

        if Q==2 or Q==4:
            if saikoro%2==1:
                if k=='2A':
                    Demo_Use1+=2*(v/2)
            if saikoro%2==0:
                if k=='2B':
                    Demo_Use2+=2*(v/2)

        if Q==3 or Q==6:
            if k=='3A':
                Demo_Use1+=1*(v/3)
            if k=='3B':
                Demo_Use2+=1*(v/3)

    return(int(Demo_Use1),int(Demo_Use2))


#Sample_Demo_New_Bloku_Scoring()



"""

Main (仮)

"""

# ユーザーのどちらかが、25ポイント以上なら終了
while int(Demo_Use1)<=25 or int(Demo_Use2)<=25:
    # ターン処理
    saikoro+=1
    # 操作コメント
    print('横x 縦y ブロック番号 縦か横 [0 or1]')
    # 実際のユーザー入力
    Horizontal_or_Vertical=list(map(int,input().split()))
    # ターンによるユーザー分け
    if saikoro%2==1:
        print('ユーザー Aのターン')
        try:
            if Horizontal_or_Vertical[-1]==0:
                Sample_Demo_New_Bloku2(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r1[Horizontal_or_Vertical[2]])
            elif Horizontal_or_Vertical[-1]==1:
                Sample_Demo_New_Bloku3(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r1[Horizontal_or_Vertical[2]])
        except IndexError:
            pass
    elif saikoro%2==0:
        print('ユーザー Bのターン')
        try:
            if Horizontal_or_Vertical[-1]==0:
                Sample_Demo_New_Bloku4(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r2[Horizontal_or_Vertical[2]])
            elif Horizontal_or_Vertical[-1]==1:
                Sample_Demo_New_Bloku5(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r2[Horizontal_or_Vertical[2]])
        except IndexError:
            pass
    # MAP要素のカウント
    T=Sample_Demo_New_Bloku_Initialization()
    # 毎ターン振られるサイコロの目
    Q=Sample_Demo_New_Bloku_Random_Number()
    print('サイコロの目',Q)
    # 各ユーザーの 現在のスコア
    print('スコア',Sample_Demo_New_Bloku_Scoring())
    # MAP表示
    pprint(l)



"""
# ユーザー 処理
def Sample_Demo_New_Bloku1(x,y,z,W,G):
    if G==0:
        for i in range(len(z)):
            if l[x][y+i]=='0':
                l[x][y+i]=W[W.index(z)][i]
            else:pass
    elif G==1:
        for i in range(len(z)):
            if l[x+i][y]=='0':
                l[x+i][y]=W[W.index(z)][i]
            else:pass


    # ターンによるユーザー分け
    if saikoro%2==1:
        print('ユーザー Aのターン')
        try:
            if Horizontal_or_Vertical[-1]==0:
                Sample_Demo_New_Bloku1(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r1[Horizontal_or_Vertical[2]],r1,0)
        except IndexError:
            pass
    elif saikoro%2==0:
        print('ユーザー Bのターン')
        try:
            if Horizontal_or_Vertical[-1]==0:
                Sample_Demo_New_Bloku1(Horizontal_or_Vertical[0],Horizontal_or_Vertical[1],r2[Horizontal_or_Vertical[2]],r2,0)
        except IndexError:
            pass

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

pygameなんて如何でしょ。
tkinterとかでも良さそうですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/26 19:41

    可能なら、マルチプラットフォームが良いかなーとは思ってます。

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16318questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • C#

    7064questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Python 3.x

    6290questions

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

  • Windows 10

    936questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • Linux Mint

    30questions

    Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。