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

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

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

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

Processing

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

Q&A

解決済

2回答

2327閲覧

ブロック崩しゲーム作成について

likuson

総合スコア34

Java

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

Processing

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

0グッド

0クリップ

投稿2019/07/11 20:25

編集2019/07/12 04:54

前提・実現したいこと

processingでブロック崩しのゲームのプログラミングを書いています。ブロックの色を緑にしたいです。現在黒くなっています。

発生している問題・エラーメッセージ

エラーメッセージはありません。ブロックの色を緑に指定しても反映されません。

該当のソースコード

processing

1int x=100; 2int y=560; 3int bar_w=10;//haba 4int bar_h=100;//nagasa 5int dx=5; 6int blockX=25,blockY=10 ;//blockzahyou 7int number=50; 8int[]blocks={blockX,blockY}; 9int ellipseX=550; 10int ellipseY=545; 11int ellipseDx=5; //hayasa 12int ellipseDy=-2; 13int[][]positions=new int [200][200]; 14 15void setup(){ 16 size(1000,600); 17 displayBlocks(blocks,positions);//barwohyouzi 18 background(0); 19 noStroke(); 20 loadPixels(); 21} 22 23void draw(){ 24 updatePixels(); 25 keyPressed(); 26 displayBar(); 27 moveBall(); 28 displayBall(); 29 reboundBall(positions); 30} 31 32void displayBar(){ 33 fill(255,0,0); 34 rect(x,y,bar_h,bar_w); 35} 36 37void displayBall(){ 38 fill(0,0,255); 39 ellipse(ellipseX,ellipseY,30,30); 40} 41 42void reboundBall(int[][] positions){ 43 44 if(ellipseX > 1000-15 && ellipseDx >0){ 45 ellipseDx=-ellipseDx; 46 } 47 48 if(ellipseY>583 && ellipseDy>0){ 49 noLoop(); 50 print("GAME OVER."); 51 } 52 53 if(ellipseY<15 && ellipseDy<0){ 54 ellipseDy=abs(ellipseDy);//abs=zettaiti 55 } 56 57 if(ellipseX < 15){ 58 ellipseDx=-ellipseDx; 59 } 60 61 if(ellipseX>= x && ellipseX <= x+100 && ellipseY >= y-17){ 62 ellipseDy=-ellipseDy; 63 } 64 65 for(int i=0;i<200;i++){ 66 noStroke(); 67 smooth(); 68 if(dist(ellipseX,ellipseY,positions[0][i],positions[1][i])<=17){ 69 ellipseDx=-ellipseDx; 70 ellipseDy=-ellipseDy; 71 fill(0); 72 rect(positions[0][i],positions[1][i],20,20); 73 positions[0][i]=-1; 74 positions[1][i]=-1; 75 ellipse(ellipseX,ellipseY,31,31); 76 rect(x,y,100,10); 77 loadPixels(); 78 79 } 80 } 81 82} 83 84void moveBall(){ 85 ellipseX=ellipseX+ellipseDx; 86 ellipseY=ellipseY+ellipseDy; 87} 88 89void displayBlocks(int[] block, int positions[][]){ 90 fill(0,255,0); 91 92 for(int i=0; i<200; i++){ 93 rect(block[0],block[1],20,20); 94 block[0]=block[0]+25; 95 positions[0][i]=block[0]; 96 positions[1][i]=block[1]; 97 if(block[0]>=950){ 98 block[1]=block[1]+25; 99 block[0]=25; 100 } 101 } 102} 103 104 105void keyPressed(){ 106 if(key==CODED){ 107 switch(keyCode){ 108 case LEFT: 109 if(isBlockedLeft(x)==true){ 110 return; 111 }else{ 112 x=x-dx; 113 } 114 break; 115 116 case RIGHT: 117 if(isBlockedRight(x)==true){ 118 return; 119 }else{ 120 x=x+dx; 121 } 122 break; 123 } 124 } 125} 126 127boolean isBlockedRight(int x){ 128 if(x>=width-bar_h){ 129 return true; 130 }else{ 131 return false; 132 } 133} 134 135boolean isBlockedLeft(int x){ 136 if(x<=0){ 137 return true; 138 }else{ 139 return false; 140 } 141}

試したこと

fill(0,255,0)の位置を変えてみた。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

nskydiving

2019/07/11 23:22

コードのインデントが崩れてしまっていますので、<code>タグを使ってください。 また、このままではコンパイルできないので、全体のコードを提示してください。
y_waiwai

2019/07/11 23:40

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
likuson

2019/07/12 04:56

テンプレートを利用して質問を書き直しました。コードタグにコードを書き直しました。もう一度見てくれるとありがたいです。
guest

回答2

0

ベストアンサー

setup()displayBlocks()で描画したブロックをbackground()で消去してしまっていますよ。
逆にすると表示されます。

background()
The background() function sets the color used for the background of the Processing window.
The default background is light gray.
This function is typically used within draw() to clear the display window at the beginning of each frame, but it can be used inside setup() to set the background on the first frame of animation or if the backgound need only be set once.

投稿2019/07/19 16:23

SHOMI

総合スコア4079

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

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

0

緑の四角を描くのはdisplayBlocks()。
では、そのdisplayBlocks()はどこから呼び出されていますか?

あと、loadPixels()/updatePixels()とかkeyPressed()の使い方、ちょっと尋常でない気がします。それぞれどういう意図でそのように書いていますか?

投稿2019/07/12 10:08

thkana

総合スコア7629

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

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

likuson

2019/07/12 21:49

pixelsはオブジェクトを残さないようにいれています。keypressedはkeyを押した際、反応するように書いています。displayBlockは最初に定義しました。
thkana

2019/07/13 02:35

loadPixels()/updatePixels()の使い方は...ちょっと見落としがあって解ったけど、そういうことですか。あまりそういう使い方してるのをみたことなかった。私だったら、PImageで取った変数にgetで画面を取得してbackgroundで貼り付け、とかするところかなぁ。 keyPressed(大文字小文字は意味があるので使い分けましょう) の使い方もわからないでもないけど、汚い使い方だと思います。 さて。本題...の前に。 「定義」じゃてくて呼び出し、の話です。定義は「この関数は(呼び出されたら)こういう動きをします」とコンピュータに教えること。呼び出しは「その関数を実際に動かす」こと。よくわからない用語を無理に使わない方がいいです。誤用があると話がややこしくなるだけです。 で、今度こそ本題。displayBlocks()が呼び出されているあたりをよく見てみましょう。 void setup(){ size(1000,600); displayBlocks(blocks,positions);//barwohyouzi background(0); noStroke(); loadPixels(); } たった5文の処理なので、一文ずつ何をしているか確認して下さい。そして、この順に処理を行ったら結果がどうなるか。「ブロックの色が黒くなっている」わけではないのがわかるかしら。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問