Pythonはゲームを書くことができますが、適切ではありません。以下の具体的な理由を分析してみましょう。
ハンマーで車を作ることはできますか?誰もノーとは言えませんか?確かに歴史上、ハンマーで作られた車がありました。しかし、一般的に、産業用ロボットを使用する方が適切ですか?
Pythonを使用する比較的大きなゲームは2つあり、1つは「EVE」、もう1つは「Civilization」です。しかし、これは単なる例であり、広い意味はありません。
一般的に言って、ゲームを作るために使用される2つの言語があります。 1つはC ++です。 。 1つはC#です。 。
理論的には、Pythonはゲームに適しているだけでなく、大規模なプログラムが適していない限り適しています。計算機、クローラーなどの比較的小さなものを書くのにのみ適しています。
2つの主要な側面があります。1つは低速であり、もう1つは文法上の欠陥です。
たぶん、Pythonの構文はクリーンでエレガントだと思わなければなりませんが、なぜ欠陥があるのでしょうか。しかし、それについて慎重に考えてください、なぜ他の言語はそれほどきれいではないのですか?それほどエレガントではありませんか?明らかに、a = 123は直接書き込むことができますが、なぜint a = 123として書き込む必要があるのですか。他の言語の設計者が強迫観念を持っているからですか?理由は単純です、利益と損失があります。
データタイプが文字列と数字のみの場合、変数を宣言するプロセスを省略しても問題はありません。しかし、ロジックが複雑になる限り、状況はまったく異なります。 。 。ゲームでは、C#またはC ++で記述します。おそらく次のようになります。
スキル=xxxx;
武器b=xxxx;
役割c=xxxx;
ポーションd=xxxx;
音楽e=xxxx;
Pythonはどうですか?おそらくこのように
a=xxxx
b=xxxx
c=xxxx
d=xxxx
コードがほとんどない場合は、Pythonの方が明らかに便利です。しかし、何百ものオブジェクトを作成すると、コードは10,000行を超えます。 。 。数千行を書いたとき、xというオブジェクトに遭遇しました。それが何であるかまだ知っていますか?それは武器ですか?またはポーションのボトル?まだ写真?オーディオの一部?ライト?家?
10,000行のコードが多いとは思わないでください。 。 。 。 10,000行は「ファイトランドロード」を終えることさえできません。 。
Pythonで大規模なプログラムを作成する感覚は、初日に50行のコードを作成し、3つのクラスと5つのオブジェクトを作成しただけであるということです。あなたはとてもクールに感じるでしょう、これは間違いなく世界で最高の言語です。 。 。翌日、さらに2つのクラスと5つのオブジェクトを作成すると、少し目がくらむように感じました。 3日目に、さらに2つのクラスを作成した後、コメントを注意深く読む必要があることに気付くでしょう。そうしないと、コメントを書くことができません。 4日目は一日中メモを読んでいます。 。 。 。
これは動的言語の劣った性質です。当初、コードの量は少なく、欠点は見られず、あらゆる種類のトラブルがなく、あらゆる種類のクールでした。コードが多いほど、脳は混乱します。一般的に500行を超えると、JAVAやC#などの言語が効率を上回ります。 。 1000行、理解するにはさまざまなコメントを追加する必要があります。 。 2000行、コードよりもコメントが多い。 。 5000行、コメントはまったく役に立たない、コードがまったく理解できない、ピットを破棄する準備をする必要がある。
要約すると、それはpythonがゲームを開発できないということではなく、単に適切ではありません。各言語には独自の長所と短所があります。おそらく、pythonの短所はゲームの開発です。
Pythonゲームの例の補足:
ディーリングゲーム
4人のプレイヤーがカードをプレイし、コンピューターがランダムに52枚のカード(大小の王には適していません)を4人のプレイヤーに配布し、各プレイヤーのカードを画面に表示します。
オブジェクト指向プログラミング
プログラミング手順
デザインカテゴリ、ライセンスプログラムには、カードカテゴリ、ハンドカテゴリ、ポークカテゴリの3つのカテゴリがあります。
カードクラス:カードクラスはカードを表します。FaceNumフィールドはカード番号1〜13を示し、Suitフィールドはスーツの色、クラブの「プラム」、正方形の「正方形」、ハートの「赤」を示します。 「黒」はスペードを意味します。
Handクラス:Handクラスは、プレーヤーの手にあるカードと見なすことができる手(プレーヤーが持っているカード)を表します。cardslist変数は、プレーヤーの手にあるカードを格納します。カードを追加したり、手札のカードをクリアしたり、他のプレイヤーにカードを渡したりすることができます。
ポーククラス:ポーククラスはカードのデッキを表します。カードのデッキは52枚のカードを持つプレーヤーと見なすことができるため、ハンドクラスを継承します。カードリスト変数は52枚のカードを格納する必要があり、カードは配られてシャッフルされるため、次のメソッドが追加されます。
メインプログラム:メインプログラムは比較的単純です。4人のプレーヤーがいるため、初期化された4人のプレーヤーを格納するためにプレーヤーリストが生成されます。カードのデッキのオブジェクトインスタンスpoke1を生成し、populate()メソッドを呼び出して52枚のカードのデッキを生成し、huffle()メソッドを呼び出して順序をシャッフルし、deal(players、13)メソッドを呼び出して各プレーヤーに13を与えます。カード、そして最後に4人のプレーヤーのすべてのカードを表示します。
classCard():""" A playing card. """
RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #カード番号1-13
SUITS=["梅","平方","赤","黒"]
# プラムはクラブ、正方形は正方形のダイヤモンド、赤は赤いハート、黒はスペードです
def __init__(self,rank,suit,face_up=True):
self.rank=rank #カード番号1を参照-13
self.suit=suit #スーツはスーツを指します
self.is_face_up=face_up #カードの表面を表示するかどうか、Trueはカードの表面、Falseはカードの裏面です。
def __str__(self): #print()if self.is_face_up:
rep=self.suit+self.rank #+" "+str(self.pic_order())else:
rep="XX"return rep
def flip(self): #フロップ法
self.is_face_up=not self.is_face_up
def pic_order(self): #シーケンス番号
if self.rank=="A":
FaceNum=1
elif self.rank=="J":
FaceNum=11
elif self.rank=="Q":
FaceNum=12
elif self.rank=="K":
FaceNum=13else:
FaceNum=int(self.rank)if self.suit=="梅":
Suit=1
elif self.suit=="平方":
Suit=2
elif self.suit=="赤":
Suit=3else:
Suit=4return(Suit-1)*13+FaceNum
classHand():""" A hand of playing cards. """
def __init__(self):
self.cards=[]
def __str__(self):if self.cards:
rep=""for card in self.cards:
rep+=str(card)+"\t"else:
rep="無免許"return rep
def clear(self):
self.cards=[]
def add(self,card):
self.cards.append(card)
def give(self,card,other_hand):
self.cards.remove(card)
other_hand.add(card)classPoke(Hand):""" A deck of playing cards. """
def populate(self): #カードのデッキを生成する
for suit in Card.SUITS:for rank in Card.RANKS:
self.add(Card(rank,suit))
def shuffle(self): #シャッフル
import random
random.shuffle(self.cards) #カードの順序をシャッフルします
def deal(self,hands,per_hand=13):for rounds inrange(per_hand):for hand in hands:
top_card=self.cards[0]
self.cards.remove(top_card)
hand.add(top_card)if __name__=="__main__":print("This is a module with classed for playing cards.")
# 4人のプレーヤー
players=[Hand(),Hand(),Hand(),Hand()]
poke1=Poke()
poke1.populate() #カードのデッキを生成する
poke1.shuffle() #シャッフル
poke1.deal(players,13) #各プレイヤーに13枚のカード
# 4人のプレーヤーのカードを表示する
n=1for hand in players:print("ポーカープレイヤー",n,end=":")print(hand)
n=n+1input("\nPress the enter key to exit.")
これで、pythonがゲームを開発できるかどうかについての記事は終わりです。より関連性の高いpythonコンテンツについては、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLou.Cnをさらにサポートしていただければ幸いです。 !
Recommended Posts