teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

追記しました

2019/05/04 03:51

投稿

noberon
noberon

スコア17

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,8 @@
3
3
 
4
4
  おそらく関数、引数渡す段階(gamePlay関数の中のplayerMove関数辺り)で上手くいってないと思うので詳しい方教えてください。当方プログラミング初心者のため下手な質問ですみません。
5
5
 
6
- 以下にはおそらく問題であろうプレイヤーの動き関する部分だけ載せておきます。
6
+ 文字数制限があるので変更後のコードは以下に、変更前のコドは編集依頼返信画面に載せてあります。
7
+ お手数おかけしますがご確認よろしくお願いします。
7
8
 
8
9
 
9
10
  ,,,processing 変更後(引数渡し)

2

文字数制限があるので変更後のみ載せます。自機の移動ができなくなったのでPlayer系の関数に問題があると思います

2019/05/04 03:51

投稿

noberon
noberon

スコア17

title CHANGED
File without changes
body CHANGED
@@ -5,21 +5,24 @@
5
5
 
6
6
  以下にはおそらく問題であろうプレイヤーの動きに関する部分だけ載せておきます。
7
7
 
8
- ,,,processing 変更前
9
8
 
9
+ ,,,processing 変更後(引数渡し)
10
10
  int keyy; //流れ管理
11
11
  PImage player1,bg, bombP;// bP: プレイヤーの弾
12
12
  PImage[] enemy = new PImage[2];
13
13
 
14
+ int px1=240,py1=50,ph1=50,pw1=50; //プレイヤー1の座標と高さ幅
14
- int px,pw=50,py=50,ph=50;
15
+ int px2,pw2=50,py2=700,ph2=50;//プレイヤー2の座標と高さ幅
15
16
 
16
- float[] ex =new float[12];
17
+ float[] ex =new float[12]; //敵の座標
17
18
  int[] ey = new int[12];
18
19
  int[] ef = new int[12]; //フラグ  0:左方向  1:右方向 2:未使用
19
20
  float[] ev = new float[12]; //敵の移動速度
20
21
 
21
- int[] bPx = new int[6]; //Player弾
22
+ int[] bPx1 = new int[6]; //Player弾
22
- int[] bPy = new int[6];
23
+ int[] bPy1= new int[6];
24
+ int[] bPx2 = new int[6]; //Player弾
25
+ int[] bPy2= new int[6];
23
26
 
24
27
  int[] bEx = new int[20]; //Enemy弾
25
28
  int[] bEy = new int[20];
@@ -36,7 +39,7 @@
36
39
  noStroke();
37
40
  frameRate(30);
38
41
  imgLoad();
39
- gameInit(); //ゲーム初期化
42
+ gameInit(bPy1); //ゲーム初期化
40
43
  }
41
44
 
42
45
  void draw(){
@@ -45,6 +48,7 @@
45
48
  gameTitle();
46
49
 
47
50
  }else if( keyy == 1){
51
+ //px1,py1,pw1,ph1,bPx1,bPy1
48
52
  gamePlay();
49
53
  }else if( keyy == 2){
50
54
  gameOver();
@@ -52,9 +56,11 @@
52
56
 
53
57
  }
54
58
 
55
- void gameInit(){
59
+ void gameInit(int[] bPy){
56
60
  keyy = 0;
57
- px =240;
61
+ //px =240;
62
+
63
+
58
64
  for(int i =0; i<12; i++){
59
65
  ef[i] = 2;
60
66
  //ex[i] = i*20;
@@ -75,13 +81,14 @@
75
81
  void gameTitle(){
76
82
  keyy =1;
77
83
  }
84
+ //int px,int py,int pw,int ph,int[]bPx,int[]bPy
78
85
  void gamePlay(){
79
- playerMove();
86
+ playerMove(bPx1,bPy1,px1,pw1);
80
- image(player1,px,py,pw,ph);
87
+ image(player1,px1,py1,pw1,ph1);
81
88
  enemyMove();
82
- enemyDisp();
89
+ enemyDisp(bPx1,bPy1);
83
- bombPMove();
90
+ bombPMove(bPx1,bPy1);
84
- bombEMove();
91
+ bombEMove(px1,py1,pw1,ph1);
85
92
  scoreDisp();
86
93
  }
87
94
  void gameOver(){
@@ -93,7 +100,7 @@
93
100
  enemy[0] =loadImage("敵.png");
94
101
  bombP =loadImage("2弾.png");
95
102
  }
96
- void playerMove(){
103
+ void playerMove(int[] bPx,int[] bPy,int px,int pw){
97
104
  // if( (keyPressed == true) && (key == CODED) ){
98
105
  if( ( keyKeep == LEFT) && (px>0) ){
99
106
  px -= 3;
@@ -107,7 +114,7 @@
107
114
  }
108
115
  if( (keyPressed == true) && (key == ' ' ) && (bombWait == 0) ){
109
116
  bombWait =10; //10秒まち
110
- bombPAdd();
117
+ bombPAdd(bPx,bPy,px,pw);
111
118
 
112
119
  }
113
120
  }
@@ -126,110 +133,144 @@
126
133
  }
127
134
  }
128
135
 
136
+ void enemyMove(){
137
+ for(int i=0; i<12; i++){
138
+ ex[i] += ev[i];
139
+ if( (ef[i] ==0) && (ex[i] < -50) ){
140
+ ef[i]= 2; //画面外皮表示
141
+ }
142
+ if( (ef[i] ==1) && (ex[i] >600) ){
143
+ ef[i]= 2; //画面外皮表示
144
+ }
145
+ }
146
+ if ( random(1000)<20){ //敵の発生率
147
+ enemyAdd();
148
+ }
149
+ }
129
150
 
130
- ,,,processing 変更後(引数渡し)
131
- int keyy; //流れ管理
132
- PImage player1,bg, bombP;// bP: プレイヤーの弾
133
- PImage[] enemy = new PImage[2];
134
- int px1=240,py1=50,ph1=50,pw1=50; //プレイヤー1の座標と高さ幅
135
- int[] bPx1 = new int[6]; //Player弾
136
- int[] bPy1= new int[6];
137
- int bombWait;
138
- int keyKeep; //押下中のキー
139
151
 
152
+ void enemyDisp(int[] bPx,int[] bPy){
153
+ for(int i=0; i<12; i++){
154
+ if ( ef[i] <2){
155
+ image(enemy[0],ex[i],ey[i],50,50);
156
+
157
+ for(int j=0; j<6; j++){
158
+ if( (bPx[j] < ex[i]+50) && (bPx[j]+25 > ex[i])
159
+ && (bPy[j] < ey[i]+50) && (bPy[j]+25 > ey[i]) ){
160
+ bPy[j] = -20;
161
+ ef[i] = 2;
162
+ scoreS +=10;
163
+ break;
164
+ }
165
+
166
+ }
167
+
168
+ }
169
+ if ( (ef[i] < 2) && (random(2000)<10) ){ //敵爆弾発生率
170
+ bombEAdd(int (ex[i]), ey[i] );
171
+ }
172
+ }
173
+ }
140
174
 
141
- void setup(){
175
+ void enemyAdd(){
176
+ for(int i=0; i<12; i++){
177
+ if( ef[i] == 2){ //未使用の中から敵を追加
178
+ ev[i] = random(0.5,2.5);
179
+ if (random(100) <50){
180
+ ef[i] = 0 ; //左
142
- size(600,800);
181
+ ex[i] = 600;
182
+ ev[i] =-ev[i] ;
183
+ }
184
+ else{
185
+ ef[i] = 1;
143
- noStroke();
186
+ ex[i]= -80;
187
+ }
188
+ ey[i] = int(random(150,650));
189
+ break;
190
+ }
191
+ }
192
+ }
193
+
194
+ void bombPAdd(int[] bPx,int[]bPy,int px,int pw){
195
+ for(int i=0; i<3; i++){
196
+ if ( bPy[i] == -20){ //未使用の弾を使う
197
+ bPx[i] = px + (pw/2)-15; //Pの中心
198
+ bPy[i] = 70;
199
+ break; //一発のみ
200
+ }
201
+ }
202
+ }
203
+
204
+ void bombPMove(int[] bPx,int[]bPy){
144
- frameRate(30);
205
+ int bcnt =3;
206
+ for(int i= 0; i<3; i++){
207
+ if ( bPy[i] >0){
145
- imgLoad();
208
+ bPy[i] += 5;
209
+ bcnt--;
210
+ }
211
+ if ( bPy[i] >800){ //画面上外
146
- gameInit(bPy1); //ゲーム初期化
212
+ bPy[i] = -20; //未使用に戻す
213
+ }
214
+ image(bombP,bPx[i],bPy[i]-8,30,30);
215
+ //for(int e= 0; e<12; e++){
216
+ // if( (bPx[i] < ex[e]+50) && (bPx[i]+25 > ex[e])
217
+ // && (bPy[i] < ey[e]+50) && (bPy[i]+25 > ey[e]) ){
218
+ // scoreS +=10;
219
+
220
+ // }
221
+ //}
222
+
223
+ }
224
+ for(int i=0; i< bcnt; i++){
225
+ image(bombP, 230+i*26,10,25,25);
226
+ }
147
227
  }
148
228
 
149
- void draw(){
229
+ void bombEAdd(int xx, int yy){
150
- background(100);
230
+ for( int i=0; i<20; i++){
151
- if( keyy == 0){
231
+ if ( bEy[i] == -20){
232
+ bEx[i] = xx +18;
233
+ bEy[i] = yy;
234
+ if( random(100) < 50 ){
152
- gameTitle();
235
+ bEv[i] = 1;
153
-
154
- }else if( keyy == 1){
236
+ }else{
155
- //px1,py1,pw1,ph1,bPx1,bPy1
156
- gamePlay();
237
+ bEv[i] = -1;
157
- }else if( keyy == 2){
158
- gameOver();
159
- }
238
+ }
160
-
239
+ break;
240
+ }
241
+ }
161
242
  }
162
243
 
163
- void gameInit(int[] bPy){
244
+ void bombEMove(int px,int py,int pw,int ph ){
164
- keyy = 0;
165
- //px1 =240;
166
-
167
-
168
- for(int i =0; i<12; i++){
245
+ for( int i = 0; i<20; i++){
246
+ //bEv[i] = 1;
247
+ if ( (bEy[i] > 0) ){
248
+ //if( random(100) < 50 ){
169
- ef[i] = 2;
249
+ bEy[i] -= bEv[i];
250
+ // }
251
+ //else{
252
+ // bEy[i] +=bEv[i];
253
+ //}
170
- }
254
+ }
255
+ if(( bEy[i] <= 0) || ( bEy[i] >=800) ) {
171
- for(int i=0; i<6; i++){
256
+ //if(bEy[i] < 90) {
172
- bPy[i] = -20; //-20:未使用
257
+ bEy[i] = -20;
173
- }
258
+ }
259
+
174
- bombWait = 0;
260
+ if( (bEx[i] < px+pw) && (bEx[i]+10 >px)
261
+ && (bEy[i] < py+ph) && (bEy[i]+10 >py) ) {
175
- keyKeep = 0;
262
+ bEy[i] = -20;
176
-
177
- for(int i=0; i<20; i++){
263
+ scoreS -=50;
178
- bEy[i] = -20; //-20:未使用
179
- }
264
+ }
265
+
266
+
180
-
267
+ fill(0);
268
+ rect(bEx[i],bEy[i],10,10);
269
+ // image(bombP,bEx[i],bEy[i]-8,10,10);
270
+ }
181
271
  }
182
- void gameTitle(){
183
- keyy =1;
184
- }
185
- //int px,int py,int pw,int ph,int[]bPx,int[]bPy
186
- void gamePlay(){
187
- playerMove(bPx1,bPy1,px1,pw1);
188
- image(player1,px1,py1,pw1,ph1);
189
- enemyMove();
190
- enemyDisp(bPx1,bPy1);
191
- bombPMove(bPx1,bPy1);
192
- bombEMove(px1,py1,pw1,ph1);
193
- scoreDisp();
194
- }
195
- void gameOver(){
196
- scoreDisp();
197
- }
198
272
 
199
- void imgLoad(){
200
- player1 = loadImage("player1.png");
201
- enemy[0] =loadImage("敵.png");
202
- bombP =loadImage("弾.png");
203
- }
204
- void playerMove(int[] bPx,int[] bPy,int px,int pw){
205
- // if( (keyPressed == true) &&(key == CODED) ){
206
- if( ( keyKeep == LEFT) &&(px>0) ){
207
- px -= 3;
208
- }
209
- if( ( keyKeep == RIGHT) &&(px <600-pw) ){
210
- px += 3;
211
- }
212
- // }
213
- if( bombWait>0){
214
- bombWait--;
215
- }
216
- if( (keyPressed == true) &&(key == ' ' ) &&(bombWait == 0) ){
217
- bombWait =10; //10秒まち
218
- bombPAdd(bPx,bPy,px,pw);
219
-
220
- }
221
- }
222
- void keyPressed(){
273
+ void scoreDisp(){
223
- if (key == CODED){
224
- if( (keyCode == LEFT) || (keyCode == RIGHT) ){
225
- keyKeep = keyCode;
226
- }
227
- }
228
- }
229
- void keyReleased(){
230
- if (key == CODED){
231
- if( (keyCode == LEFT) || (keyCode == RIGHT) ){
232
- keyKeep = 0;
274
+ textSize(24);
233
- }
275
+ text( "score:"+scoreS, 10,25);
234
- }
235
276
  }

1

プログラムの変更前と後を追記

2019/05/04 03:47

投稿

noberon
noberon

スコア17

title CHANGED
File without changes
body CHANGED
@@ -3,12 +3,134 @@
3
3
 
4
4
  おそらく関数、引数渡す段階(gamePlay関数の中のplayerMove関数辺り)で上手くいってないと思うので詳しい方教えてください。当方プログラミング初心者のため下手な質問ですみません。
5
5
 
6
- 以下にはおそらく問題であろう部分だけ載せておきますが、補足に全プログラムを載せておきます
6
+ 以下にはおそらく問題であろうプレイヤーの動きに関する部分だけ載せておきます。
7
7
 
8
+ ,,,processing 変更前
8
9
 
9
10
  int keyy; //流れ管理
10
11
  PImage player1,bg, bombP;// bP: プレイヤーの弾
11
12
  PImage[] enemy = new PImage[2];
13
+
14
+ int px,pw=50,py=50,ph=50;
15
+
16
+ float[] ex =new float[12];
17
+ int[] ey = new int[12];
18
+ int[] ef = new int[12]; //フラグ  0:左方向  1:右方向 2:未使用
19
+ float[] ev = new float[12]; //敵の移動速度
20
+
21
+ int[] bPx = new int[6]; //Player弾
22
+ int[] bPy = new int[6];
23
+
24
+ int[] bEx = new int[20]; //Enemy弾
25
+ int[] bEy = new int[20];
26
+ int[] bEv = new int[20]; //E弾速度
27
+
28
+ int bombWait;
29
+ int keyKeep; //押下中のキー
30
+
31
+ int scoreS = 0;
32
+ int scoreC = 0;
33
+
34
+ void setup(){
35
+ size(600,800);
36
+ noStroke();
37
+ frameRate(30);
38
+ imgLoad();
39
+ gameInit(); //ゲーム初期化
40
+ }
41
+
42
+ void draw(){
43
+ background(100);
44
+ if( keyy == 0){
45
+ gameTitle();
46
+
47
+ }else if( keyy == 1){
48
+ gamePlay();
49
+ }else if( keyy == 2){
50
+ gameOver();
51
+ }
52
+
53
+ }
54
+
55
+ void gameInit(){
56
+ keyy = 0;
57
+ px =240;
58
+ for(int i =0; i<12; i++){
59
+ ef[i] = 2;
60
+ //ex[i] = i*20;
61
+ //ey[i] = 110 + i*50;
62
+ //ev[i] =random(0.5,2.5);
63
+ }
64
+ for(int i=0; i<6; i++){
65
+ bPy[i] = -20; //-20:未使用
66
+ }
67
+ bombWait = 0;
68
+ keyKeep = 0;
69
+
70
+ for(int i=0; i<20; i++){
71
+ bEy[i] = -20; //-20:未使用
72
+ }
73
+
74
+ }
75
+ void gameTitle(){
76
+ keyy =1;
77
+ }
78
+ void gamePlay(){
79
+ playerMove();
80
+ image(player1,px,py,pw,ph);
81
+ enemyMove();
82
+ enemyDisp();
83
+ bombPMove();
84
+ bombEMove();
85
+ scoreDisp();
86
+ }
87
+ void gameOver(){
88
+ scoreDisp();
89
+ }
90
+
91
+ void imgLoad(){
92
+ player1 = loadImage("player2.png");
93
+ enemy[0] =loadImage("敵.png");
94
+ bombP =loadImage("2弾.png");
95
+ }
96
+ void playerMove(){
97
+ // if( (keyPressed == true) && (key == CODED) ){
98
+ if( ( keyKeep == LEFT) && (px>0) ){
99
+ px -= 3;
100
+ }
101
+ if( ( keyKeep == RIGHT) &&(px <600-pw) ){
102
+ px += 3;
103
+ }
104
+ // }
105
+ if( bombWait>0){
106
+ bombWait--;
107
+ }
108
+ if( (keyPressed == true) && (key == ' ' ) && (bombWait == 0) ){
109
+ bombWait =10; //10秒まち
110
+ bombPAdd();
111
+
112
+ }
113
+ }
114
+ void keyPressed(){
115
+ if (key == CODED){
116
+ if( (keyCode == LEFT) || (keyCode == RIGHT) ){
117
+ keyKeep = keyCode;
118
+ }
119
+ }
120
+ }
121
+ void keyReleased(){
122
+ if (key == CODED){
123
+ if( (keyCode == LEFT) || (keyCode == RIGHT) ){
124
+ keyKeep = 0;
125
+ }
126
+ }
127
+ }
128
+
129
+
130
+ ,,,processing 変更後(引数渡し)
131
+ int keyy; //流れ管理
132
+ PImage player1,bg, bombP;// bP: プレイヤーの弾
133
+ PImage[] enemy = new PImage[2];
12
134
  int px1=240,py1=50,ph1=50,pw1=50; //プレイヤー1の座標と高さ幅
13
135
  int[] bPx1 = new int[6]; //Player弾
14
136
  int[] bPy1= new int[6];
@@ -75,9 +197,9 @@
75
197
  }
76
198
 
77
199
  void imgLoad(){
78
- player1 = loadImage("player2.png");
200
+ player1 = loadImage("player1.png");
79
201
  enemy[0] =loadImage("敵.png");
80
- bombP =loadImage("弾.png");
202
+ bombP =loadImage("弾.png");
81
203
  }
82
204
  void playerMove(int[] bPx,int[] bPy,int px,int pw){
83
205
  // if( (keyPressed == true) &&(key == CODED) ){