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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

0回答

1361閲覧

2次元配列とList、マウス操作

reee__hpp

総合スコア0

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/11/11 09:16

編集2020/11/11 10:26

課題で困ってしまったので初めて質問を失礼します。不慣れなのでもしもなにか失礼なことがありましたら申し訳ないです。

前提・実現したいこと

Processingで、2次元配列に整数を配置し、そこに画像を格納し、それをマウスで移動してクリックとドラッグで入れ替えるというものを作っています。

発生している問題

2次元配列に画像を格納してランダム配置まではできたのですが、マウス操作のところでどうしたら良いか分からなくなりました。
ただ図形を移動するだけとかなら出来るのですが、配列に入れたものを隣の配列と交換となるとよく分かりません。

参考になるコートがあったので、自分のものに当てはめてみようとしたのですが、エラーが沢山出て(対応してない部分が多いので当たり前かもしれない)、進め方がわからなくなりました。

Processing

1 2PImage[] img=new PImage[6]; 3boolean f; 4int[][] picIdx; 5PImage[] pic; 6int stick; 7int xx, yy; 8int dx; 9int dy; 10int [][] array; 11void setup(){ 12 13 size(800,1000); 14 15 16img[0]=loadImage("heart.jpg"); 17img[1]=loadImage("triangle.jpg"); 18img[2]=loadImage("clober.jpg"); 19img[3]=loadImage("dia.jpg"); 20img[4]=loadImage("spead.jpg"); 21img[5]=loadImage("moon.jpg"); 22f = false; 23array = new int[5][6]; 24} 25 26void draw(){ 27 28 29 if( ! f ) { 30 for( int i =0; i<5; i++){ 31 for( int j = 0; j<6; j++){ 32 array[i][j] = (int)random(0,5); 33 while( j > 0 && array[ i ][ j ] == array[ i ][ j - 1 ] ) 34 array[i][j] = (int)random(0,5); 35 while( i > 0 && array[ i ][ j ] == array[ i - 1 ][ j ] ) 36 array[i][j] = (int)random(0,5); 37 } 38 39 } 40 f = ( frameCount >= 1 ); 41 } 42 43 if (stick!=0) { 44 image(pic[stick], mouseX-dx, mouseY-dy); 45 } 46} 47 48void mousePressed() { 49 int x=mouseX/W; 50 int y=mouseY/H; 51 dx=mouseX%W; 52 dy=mouseY%H; 53 if (stick==0) { 54 xx=x; 55 yy=y; 56 stick=picIdx[y][x]; 57 picIdx[y][x]=0; 58 } else { 59 picIdx[yy][xx]=picIdx[y][x]; 60 picIdx[y][x]=stick; 61 stick=0; 62 } 63} 64 65image(img[array[0][0]], width/2-304,height/2-100,100,100); 66image(img[array[0][1]], width/2-204,height/2-100,100,100); 67image(img[array[0][2]], width/2-104,height/2-100,100,100); 68image(img[array[0][3]], width/2-4,height/2-100,100,100); 69image(img[array[0][4]], width/2+96,height/2-100,100,100); 70image(img[array[0][5]], width/2+196,height/2-100,100,100); 71 72 73image(img[array[1][0]], width/2-304,height/2,100,100); 74image(img[array[1][1]], width/2-204,height/2,100,100); 75image(img[array[1][2]], width/2-104,height/2,100,100); 76image(img[array[1][3]], width/2-4,height/2,100,100); 77image(img[array[1][4]], width/2+96,height/2,100,100); 78image(img[array[1][5]], width/2+196,height/2,100,100); 79 80 81image(img[array[2][0]], width/2-304,height/2+100,100,100); 82image(img[array[2][1]], width/2-204,height/2+100,100,100); 83image(img[array[2][2]], width/2-104,height/2+100,100,100); 84image(img[array[2][3]], width/2-4,height/2+100,100,100); 85image(img[array[2][4]], width/2+96,height/2+100,100,100); 86image(img[array[2][5]], width/2+196,height/2+100,100,100); 87 88 89image(img[array[3][0]], width/2-304,height/2+200,100,100); 90image(img[array[3][1]], width/2-204,height/2+200,100,100); 91image(img[array[3][2]], width/2-104,height/2+200,100,100); 92image(img[array[3][3]], width/2-4,height/2+200,100,100); 93image(img[array[3][4]], width/2+96,height/2+200,100,100); 94image(img[array[3][5]], width/2+196,height/2+200,100,100); 95 96 97image(img[array[4][0]], width/2-304,height/2+300,100,100); 98image(img[array[4][1]], width/2-204,height/2+300,100,100); 99image(img[array[4][2]], width/2-104,height/2+300,100,100); 100image(img[array[4][3]], width/2-4,height/2+300,100,100); 101image(img[array[4][4]], width/2+96,height/2+300,100,100); 102image(img[array[4][5]], width/2+196,height/2+300,100,100); 103} 104

エラー

対応してない部分が多いのでエラーが多発しております。
(サイズの差、座標位置etc)

参考にしたコード

int[][] picIdx; PImage[] pic; int stick; final int W=64; final int H=64; int xx, yy; int dx; int dy; void setup() { size(384, 320); pic=new PImage[5]; pic[0]=get(0, 0, 64, 64); PImage img=loadImage("https://photoshopvip.net/wp-content/uploads/2014/06/BALLICONS.jpg"); for (int i=1; i<5; i++) { pic[i]=img.get(12+77*1, 15+77*i, 64, 64); } picIdx=new int[5][6]; for (int i=0; i<5; i++) { for (int j=0; j<6; j++) { picIdx[i][j]=int(random(4)+1); } } } void draw() { for (int i=0; i<5; i++) { for (int j=0; j<6; j++) { image(pic[picIdx[i][j]], j*64, i*64); } } if (stick!=0) { image(pic[stick], mouseX-dx, mouseY-dy); } } void mousePressed() { int x=mouseX/W; int y=mouseY/H; dx=mouseX%W; dy=mouseY%H; if (stick==0) { xx=x; yy=y; stick=picIdx[y][x]; picIdx[y][x]=0; } else { picIdx[yy][xx]=picIdx[y][x]; picIdx[y][x]=stick; stick=0; } }

補足

エラーが沢山出ているのは対応してない部分が多いので当たり前だろ!と思うかもしれませんが、進まないまま日にちばかり経ってしまったので、手助けをよろしくお願いいたします。

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

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

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

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

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

dodox86

2020/11/11 10:07

コードはマークダウン記法を用いて読みやすくするようにしてください。他の質問を見ると分かると思いますが、読みやすさが断然違います。反対に使わないと、インデントも崩れ、読みづらくなり、それだけで回答は離れがちになります。 https://teratail.com/help/question-tips#questionTips3-5-1 https://teratail.com/questions/238564 あたりを参考にしてソースコードを適切に表示するようにしましょう。 また、 > どういう処理をするかは何となく理解しているのですが、 どういう処理をするか、質問者さんの頭の中でイメージできていますか? 二次元配列または二次元配列をイメージしたList内の要素を交換できるコードが書ければ、目的のプログラムを完成できるのでしょうか。(※正直、dist()で距離を求めて次にどうするのだろう?という疑問が私にはありますが。斜め方向の距離を求めても、上下左右斜め位置に存在する別の矩形の画像位置を判別しにくくないですか?)
thkana

2020/11/11 11:34

某知恵袋で最近ちらほら見かける課題ですね。 最終的に何を作りたいのかを見失うと、そうやってクラスだリストだと脇道に入りこんじゃいますよ。 なんだか人によって「落ちもの」だったり、「落ちてこなくて消えてそこに新しいのが出てくる」だったり言うことが違うのですが(もしかしたら出題側が他人のを写すのを防止するためにグループ単位で課題を変えているのかかも知れません)、あなたが作ろうとしている「ゲーム」はどんなものですか? まず、「どういう動作をする」というのを決めないままプログラムをごちゃごちゃいじくっても多分何も出来ません。プログラムを書く前に、「こういう道筋で動くプログラム」を日本語で考えましょう。
thkana

2020/11/11 12:14 編集

(修正。コード自体は質問にあるので...) ちなみに、「参考にしたコード」は、私が書いたやつだから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問