プログラミングで例えばゲームを作る際に、そのコードで何故その画面が表示されるようになってるんでしょうか?もちろんそう組んでるんでしょうが、仕組みが分かれば丸暗記も減り、応用も効くと思ったので。
チャットgptでパイソンで迷路を作りたいと言った時のコードの一部です。何となく理屈は分かるのですが、じゃあ一から自分で思ったゲームを作りたいって時に画面の描写やキャラクターの動きの関数がどう定義されてるか分からないと難しいのではと思いました。まとまりのない文章ですがよろしくお願いしますm(_ _)m
import random
def generate_maze(width, height):
maze = [[0] * width for _ in range(height)]
def create_maze(x, y):
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
random.shuffle(directions)
for dx, dy in directions:
nx, ny = x + dx, y + dy
if 0 <= nx < width and 0 <= ny <
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ご質問は、要するに「コードの意味を知りたい」という要望と解釈しましたが、残念ながらソースコードが一部過ぎて何の機能を作っているのか?変数や配列が何に使われるのか?などの文脈が全く読み取ることが出来ないので、説明不可能です。
解説して欲しいなら、隠さずに全文載せるか、どうしても一部しか公開したくないのなら、繋がっているソースコードはキリの良い所まで載せて欲しいです。あと、丸暗記などではなく、やはりご自身でコードの意味をを読めるようになるのが一番ですので、勉強の仕方を改めて質問した方が良いかもしれません。
一応読み取れる範囲だけでも意味を拾って、頑張って回答すると、恐らく、初めに幅と高さを指定して空の二次元配列を作り、その中身をシャッフルの機能を使って上下左右に移動して迷路を作る感じのソースコードなのかな?と思いました。たぶんですが。だって手がかりが少なすぎますから。
No.4
- 回答日時:
import random
def generate_maze(width, height):
maze = [[0] * width for _ in range(height)]
def create_maze(x, y):
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
random.shuffle(directions)
for dx, dy in directions:
nx, ny = x + dx, y + dy
# The following line is incomplete and missing the condition for ny
# if 0 <= nx < width and 0 <= ny <
# It should be:
if 0 <= nx < width and 0 <= ny < height and maze[ny][nx] == 0:
maze[y][x] |= 1 << directions.index((dx, dy))
maze[ny][nx] |= 1 << directions.index((-dx, -dy))
create_maze(nx, ny)
create_maze(0, 0)
return maze
# Example usage:
width, height = 10, 10
maze = generate_maze(width, height)
for row in maze:
print(" ".join(f"{cell:02X}" for cell in row))
これでどうでしょうか?
No.3
- 回答日時:
こういうのは初代マリオで考えるとかなり直感的で分かりやすい気がするのですがどうでしょう?
例えば1-1の背景が横長の画像としたら、
右に移動するキーを押すとその画像の映す位置を右にずらします。
ディスプレイは1個1個がピクセル出できているので、例えば右のピクセルにマリオの体ごと動かすだとか、右を押した長さで速度を物理学的に計算して、スピードを変えるとか。
No.2
- 回答日時:
> まとまりのない文章ですがよろしくお願いしますm(_ _)m
ホントにまとまってねぇや(笑)。
いやさ、例に挙げたプログラムの「部分」?
そもそもここに書かれてるのって
> そのコードで何故その画面が表示されるようになってるんでしょうか?
画面が表示されるのとは何も関係なくない?
> 何となく理屈は分かるのですが
多分だから「理屈が」分かってない(笑)。
いや、責めてるんじゃないんだよ。勘違いせんで。
そもそも・・・う〜ん、まず「画面」が何を意図してんだか分からんのよね。
端末上での表示?それともいわゆる「ゲーム画面」?
その辺が曖昧なんで何とも・・・・・・。
んで、
> 仕組みが分かれば丸暗記も減り、応用も効くと思ったので。
が曖昧になる。
いや、だから責めてるわけじゃなくって、単に「仕組み」って何を意図してるのか、って事なのよね。
何故なら、画像に関しては、ある程度「暗記」が絡む話に通常はなるだろうし、「理屈だと・・・」って言うのは限界があるんだよ。
貴方の志はいい。ただし、「どの辺を想定してるのか」がサッパリ分からんのだ。
いや、貴方だけじゃなくって、本質的に、現代のパーソナルコンピュータの「画像処理上の仕組み(つまりGPUが何をどうしてるか)」を理論とするのなら、我々が通常「プログラミングする」までのレイヤーの層が厚すぎて、通常は「手に負える範疇じゃない」って事なのよ。
結果、ラップにラップを重ねて、特定の「ライブラリの使い方」を習熟するか否か、って話になっちゃうのね。
これは僕もそうだし、世の中のプログラマのホンの一部、以外もそうなわけ。
別に貴方が「理論としてハッキリ分かりたい!」とか言う志(があるならば)を邪魔するつもりはない。やりたければ専門書を読んで・・・って話にはなるし、やりたければやれば?って事しか言えない。
ただし、そうじゃないのなら、単に「特定のライブラリの使い方に習熟するか否か」の話になって、別に「仕組みがどーの」って言う範疇の話じゃないんだよな。極論、そのライブラリの「デザイナー」の趣味(つまり設計方針)に、貴方のテイストが合うか合わないか、って話なだけだし、合わなければ「暗記してパターンを覚える」ってだけの話となる。
言い換えると「仕組みが分かる」って言う程の仕組みはそのレベルにはないし、貴方が書いてる「丸暗記」ってのは良い方法だよ。むしろ、「丸暗記」した方が応用が効くんじゃない?
> 迷路を作りたい
でも迷路を作る、例えばアルゴリズムを使って?と言うのと画像は関係ないよね・・・随分前に、教えて!gooの質問で迷路作成アルゴリズム書いた事あったな・・・どれだっけ。
あ、これか。
Pythonで書くとこんな風になるのか?
https://www.ideone.com/iZ2gVV
まぁ、過去書いたロジックをザーッと書き換えただけだけど(バグってるかもしんない・笑)。
いずれにせよ、「迷路を作るアルゴリズム」と「どう表示するのか」って関係ないよね。
それと、キャラの移動だっけ?
例えばさ、端末上に迷路の自キャラを@として置いてカーソルキーを叩けば上下左右に移動するとか。ローグってゲームが有名だけど。
Leaf Rogue:
http://games.roguelife.org/leaf/
単純には自キャラの座標(x, y)に対してカーソルによってx座標あるいはy座標を±1していけばいい。
していけばいいんだけど、端末(Windowsで言うとDOS窓?)で、そういうカーソルキーを「叩く」って動作に対して「即座に反応してくれるかどうか」ってのは別問題なんだ。
なんつっても「標準入力の縛り」ってのがプログラミング言語に対しては大きいから、さ。
結果、こういうのも「貴方のプログラミング上のロジックがどーの」じゃなくって、「端末にどういうライブラリが用意されてるか」次第なのね、実際のトコ。
UNIX系OSだったらncursesってライブラリがその辺を引き受ける。Windowsだとそのテのツールが「無い」と。だから驚くけど、割に自分で「ゲーム用端末」を「GUIとして作っちゃう」って例がWindowsだと結果多いんじゃないかしらん。
余談だけど、黎明期のパソコン、ってのはモニターにテレビを使うってのが良くあったの。当時のテレビ、ってのはブラウン管のブツだな。走査線って言われるもので一画面256本しか線を引けなくて、結果、今で言うピクセル数ってのは256 x 224前後だったのね。
今の4Kテレビ、3,840x2,160とは大違いの貧弱さ、だった。
それだけじゃない。CPUの演算速度だって、今で言うとおもちゃ程度の性能しかなかったんで、256 x 224前後のピクセルを「全部操作する」ってのが不可能だったんだ。
で、最初に出たApple IIとか、結果、256 x 224のピクセル数をリアルタイムで全部制御するのは不可能だったんで、色数が多い(それでもたった15色・笑)場合、テレビの何ピクセルかを一個にまとめて、40×48くらいで絵を描く、って事しか出来なかった。
今見ると当然「しょぼ!」とか思うんだけど(笑)、反面、プログラムする側には優しかったんだよ。なんせピクセル総数が2,000に満たない。この程度なら「直接プログラマが制御コードを書けた」って意味なんだ。
当時のBASIC言語にはPOKE命令、と言われる命令があって、1ピクセル1ピクセル毎をBASICから操作出来たのね。なんも「下部レイヤー」とか存在しない。
だから今と違って、「どうすればいいのか」ってのが、皮肉な事に、「しょぼい見た目のゲームしか作れなかった」割には、「理屈としては」分かりやすかったんだ。
僕らはその時代から「凄く遠いトコへ」来ちゃった、ってお話。
写真: 初期Apple IIに付属していたゲーム「Breakout」。いわゆる「ブロック崩し」。
これはゲーセンでのブロック崩し(オリジナル)の開発に関わっていた、Appleの創業者の一人、スティーヴ・ウォズニアックの手に依るモノだと思われる。
ウォズニアックは、一種の「Apple IIで何が出来るのか」デモンストレーションの意を込めて、わずか数行のBASICによるプログラミングで、この「付属品」を作った。
しかし、「見た目はショボい」けど、「簡単にプログラム出来た」のはBASICのPOKE命令、そしてなんと言っても「扱える画素数が今の基準で言うと極端に少なかったから」だ。
結果、簡単な記述で、Apple IIではプログラマが画面の制御を思い通りに出来たわけだ。
No.1
- 回答日時:
このソースでは画面表示のためのコーディングがされていないので、何も表示されないのが正解です。
実際に画面描写する時は、グラフィックライブラリーを使って描写する命令を加えないといけません。
WindowsであればGDIやDirectXを利用します。
Webアプリケーションだと、HTML要素としてcanvasというものがあり、それをJavaScriptなどで描画する命令をコーディングすることで任意の図形を描写することができます。
https://www.sejuku.net/blog/101680
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) PythonのTkinter詳しい方へ。画像や言葉の意味を答える3択クイズを作るのに手間取っています 1 2023/12/04 17:10
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- その他(プログラミング・Web制作) UDP通信を使うチャットプログラムを改変して小さいサイズの画像も送信できないか(Python) 1 2023/12/09 19:09
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ものづくりに向いているプログラミング言語ってなんですか?家電にもプログラミングが使われてるとか
その他(プログラミング・Web制作)
-
楽しくて最高のプログラミング言語を作りたいのですが、そもそもプログラミング言語を作る意味なんてないと
その他(プログラミング・Web制作)
-
プログラムの素朴な質問です 分岐するコードを書く時に、 /** * 関数 */ sub(){ ...
その他(プログラミング・Web制作)
-
-
4
プログラミングの雑談とかできるサイトないですか?
その他(プログラミング・Web制作)
-
5
どなたかこのプログラミングを完成させて欲しいです。 ヒントはこちらです↓ 青色:ゲームプログラムのル
C言語・C++・C#
-
6
IT業界より楽に稼げる業界ってあるんですか?銀行とか?
その他(プログラミング・Web制作)
-
7
家庭のパソコンで Python の 環境構築を行います。 windows 11 です 事情があって
その他(プログラミング・Web制作)
-
8
Pythonでターミナルに文字を出力する命令を出せるprintが予約語でないのは何故ですか。予約語は
その他(プログラミング・Web制作)
-
9
Linuxでの開発環境構築や設定のコツ
C言語・C++・C#
-
10
昔のパソコン少年の武勇伝「店先のパソコンでゲームを作成し、それを売り、その金でパソコンを買う」本当?
その他(プログラミング・Web制作)
-
11
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
12
CやJAVa,Rubyなどプログラミング言語の分岐のコードを思いつく限り教えてください。 if(◯
その他(プログラミング・Web制作)
-
13
プログラミング言語の制作方法について
C言語・C++・C#
-
14
JRのjsonファイルって使って大丈夫そ?
その他(プログラミング・Web制作)
-
15
関数定義について質問です 架空のプログラミング言語ですが、こういう関数があった時、何を返してくれそう
その他(プログラミング・Web制作)
-
16
そのまま使っただけなのに・・・python
その他(プログラミング・Web制作)
-
17
c言語
C言語・C++・C#
-
18
MacのPythonでの開発について
その他(プログラミング・Web制作)
-
19
ホワイトハッカー
その他(プログラミング・Web制作)
-
20
初心者が簡単なPowerShellスクリプトを作ってみましたが動きません。アドバイスください。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java-jspの画面入力値保持について
-
三菱GOTの画面切り替えについて
-
ServletからServletへの値渡し
-
C言語で今まで表示していた画面...
-
遷移元を判定したい!
-
C# ログイン画面からメイン画面...
-
Strutsの情報保持の仕方について
-
Javascriptのhistory.back()が...
-
window.openした孫画面でSessio...
-
【JSP】input typeで入力された...
-
JavaScriptでページが更新され...
-
ASP.NET 画面遷移前の状態を保...
-
リンク先として、ページの途中...
-
HTTPステータスコードを取得(VB...
-
セッション切れでのリクエスト...
-
非アクティブな画面を操作する...
-
ASP.NETでファイルをアップロー...
-
SessionとViewStateについて
-
JAVAのセッション変数の上書き...
-
サーブレットによるpostデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java-jspの画面入力値保持について
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
ServletからServletへの値渡し
-
プログラミングで例えばゲーム...
-
C# ログイン画面からメイン画面...
-
遷移元を判定したい!
-
ASP.NET 画面遷移前の状態を保...
-
画面を隠す・消す方法を教えて...
-
ブラウザアドレスバーからのURL...
-
FormのsubmitでFormの内容がnull
-
ServletからHTMLページへの遷移...
-
Javaプログラミングの質問にな...
-
画像の縦横比固定の計算方法。
-
JAVAのセッション変数の上書き...
-
登録後、呼び出し元ページに戻...
-
Wi-Fiのパスワードが指定なしと...
-
system("cls")について
-
Beautiful Soupのインストール...
-
アドレスバーに引数を表示させ...
おすすめ情報