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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

5回答

5905閲覧

javaでテトリミノを回転させるソースコード教えてください(>人<;)

zyanpoyo

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/01/28 14:45

###前提・実現したいこと

javaのCUIでテトリスを作ろうとしています
テトリスといってもCUIなのでゲーム設計は簡単にしています

大体は出来上がってきたのですが、「テトリミノを回転させる」
プログラムがどうしても書けません
どういう動きをすればいいのか全く思いつきません

プログラムとしては
「wを押すとテトリミノを左に90度回転させる」プログラムです

もしよかったら回転させるプログラムを書いてもらいたいです><
ちなみにテトリミノは2次元配列で「”■”」または「”●”」表現しています

本当に困っています>< みなさんの力を貸してください!

###該当のソースコード
Java```ここに言語を入力
ここにご自身が実行したソースコードを書いてください

System.out.println(" T E T R I S"); String [][] field = {{"□","□","□","□","■","□","□","□","□","□"}, //ゲーム画面 {"□","□","□","□","■","□","□","□","□","□"}, {"□","□","□","□","■","□","□","□","□","□"}, {"□","□","□","□","■","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}, {"□","□","□","□","□","□","□","□","□","□"}};

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

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

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

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

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

guest

回答5

0

ゲームプログラム経験が有るので
アドバイスをさせて頂きます。

テトリミノを回転させるプログラムを教えてくださいとのことですが。

だいたいのコードは完成しているとのことですので
何かしらエラーが出てわからない状態と想定させて頂きました。

その場合まずは回転させずに普通にそのまま下に落ちるプログラムを完成させます。

次にそのプログラムとは別に回転させるプログラムを書きます。
ボタンを押すと座標を調べてから回転させるだけですが
少しだけ簡単に説明しますね

以下詳細

ゲームキャラ

例えば上のキャラを回転させる時って
●の位置をキャラクター位置座標として回転させます。
テトリスの場合も同じ

●■ クルッ こんな風に

おわかり頂けましたね?
つまり現在位置を設定して
障害物が無く回転可能なら現在位置はそのままで
描画等を変更すれば解決できるはずです。

テトリスでしたらプログラムがゴロゴロ転がってるはずですので
がんばってプログラムしてみてください。


■描画の基本■

ゲームの描画の基本について説明が足りてなかったので
させて頂きます。小話だと思って軽く聞いてください。

ゲームキャラは基本的にどんな物でも”現在位置座標”を持っています
それとは別に大きいキャラなどは描画情報も重要です

現在位置●
それ以外の描画■

■ ■ ■
■ ■ ■
● ■ ■

こんな風になってる訳ですね
現在位置を動かすだけで

三  ■ ■ ■
三  ■ ■ ■
三  ● ■ ■

動きます(当たり前ですが)
結論を言えば
現在位置とは別に描画設定が存在しているので
ボタンを押すと描画設定が変更されるという考え方が一番合理的で
まあだいたいのゲームはそんな感じだと思いますよ。

そして描画設定ってどんな感じ?と聞かれれば
●の現在位置に対してx座標に何タイル分y座標に何タイル分描画すると言う事でしょう

座標(0,1)
座標(0,0)


座標(0,0)
座標(1,0)

●■

あとは回転のプログラムを考えるだけですが
それこそネットに転がってるので説明は省略します。

投稿2017/01/28 16:25

編集2017/01/28 16:47
dec5798

総合スコア74

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

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

zyanpoyo

2017/01/29 12:58

ご丁寧な回答ありがとうございます! 二次元配列に格納した文字の座標を取得することも可能ですか?? Pointクラスを使うんでしょうか?? すいません、プログラミングが全然わからなくてこんな質問してしまって
guest

0

えぇ…まったく思いつかないのであれば、まだテトリスを作れる域に達していないという事です。
学校の課題ですか?

まず、4x4位の配列を回転させることを考えましょう。90度と限定されているのであれば、
三角関数を使用しなくても回転できると思いますが。(本当はまじめに計算したほうが良い)

配列を読み、4x4と決まっているのだから、どう書き込めば、90度回転した結果になりますか?

投稿2017/01/28 15:42

mugicya

総合スコア1046

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

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

zyanpoyo

2017/01/29 12:59

回答ありがとうございますm(_)m テトリミノの中心を決めて、そこを中心に回転させればいいのでしょか、、、
mugicya

2017/01/29 21:01

そうですね。中心は決めなければいけません。
guest

0

まともにやるなら、デバッグしながら意図した表示になるように何回もやる。
砂の城でいいなら、w押したら出来上がりのイメージの配列をそのまま表示(課題ならいいんじゃない)

Java

1String [][] field = 2[ 3["□","□","□","□","□","□","□","□","□","□"], 4["□","□","□","□","□","□","□","□","□","□"], 5["□","□","□","□","□","□","□","□","□","□"], 6["□","■","■","■","■","□","□","□","□","□"], 7["□","□","□","□","□","□","□","□","□","□"], 8["□","□","□","□","□","□","□","□","□","□"], 9["□","□","□","□","□","□","□","□","□","□"], 10["□","□","□","□","□","□","□","□","□","□"], 11["□","□","□","□","□","□","□","□","□","□"], 12["□","□","□","□","□","□","□","□","□","□"], 13["□","□","□","□","□","□","□","□","□","□"], 14["□","□","□","□","□","□","□","□","□","□"], 15["□","□","□","□","□","□","□","□","□","□"], 16["□","□","□","□","□","□","□","□","□","□"], 17["□","□","□","□","□","□","□","□","□","□"], 18["□","□","□","□","□","□","□","□","□","□"], 19["□","□","□","□","□","□","□","□","□","□"], 20["□","□","□","□","□","□","□","□","□","□"], 21["□","□","□","□","□","□","□","□","□","□"], 22["□","□","□","□","□","□","□","□","□","□"] 23];

投稿2017/01/30 07:14

tantanegg

総合スコア213

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

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

0

1ブロックにつき4通りのみなので、手入力で定義するというのも一考ですよ。

投稿2017/01/29 07:29

HogeAnimalLover

総合スコア4830

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

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

zyanpoyo

2017/01/29 12:55

分かりました! 考えてみます! 回答ありがとうございますm(_)m
guest

0

web 上でプログラムをさがし、それを参考にしてみては?

検索例:

に java で書いたテトリスがあります。

この中での テトリミノの定義と回転の設定は次のようになっています。
定義

java

1 IShape(new int[][]{{0, -1}, {0, 0}, {0, 1}, {0, 2}})

回転

java

1 void rotate(Shape s) { 2 if (s == Shape.Square) 3 return; 4 5 for (int[] row : s.pos) { 6 int tmp = row[0]; 7 row[0] = row[1]; 8 row[1] = -tmp; 9 } 10 }

投稿2017/01/28 23:12

katoy

総合スコア22324

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

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

zyanpoyo

2017/01/29 12:56

回答ありがとうございます! 参考にさせていただきます(TдT)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問