質問編集履歴

4

制約条件追加

2018/11/12 11:10

投稿

mijinko889
mijinko889

スコア33

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,16 @@
6
6
 
7
7
  javascriptで記述した以下のようなコードがあるとします。
8
8
 
9
+ 制約条件
10
+
11
+ ・パーティに同じ名前のキャラは一人しか編成できない
12
+
13
+ ・パーティには控えはいない
14
+
15
+ ・キャラは違う処理をするスキルを持つ
16
+
17
+ ・ダメージを受けた時特有の反応をするキャラもいる
18
+
9
19
 
10
20
 
11
21
  ```CharacterData.js

3

追加説明

2018/11/12 11:10

投稿

mijinko889
mijinko889

スコア33

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,9 @@
1
1
  ###前提
2
2
 
3
+
4
+
5
+
6
+
3
7
  javascriptで記述した以下のようなコードがあるとします。
4
8
 
5
9
 
@@ -294,6 +298,12 @@
294
298
 
295
299
  ```
296
300
 
301
+ キャラ(charaClassオブジェクト)ごとに違うスキル、ステータスを保持しており、戦闘シーンでのメイン処理では分岐を使わず同じ呼び出し方で書きたいと思ってたどり着いたのが現状の書き方ですね。「キャラの持つスキルの内容」を一纏めにするためにAttackDateを作っています。
302
+
303
+
304
+
305
+ キャラを作成するのと同じようにスキルも作成しようと思ったのですが、引数にfunction()を渡すコールバック処理をcharacterclassオブジェクトに作っています。
306
+
297
307
  ```characterClass.js
298
308
 
299
309
  var

2

スクリプトの全容がわかるように編集しました

2018/11/12 10:49

投稿

mijinko889
mijinko889

スコア33

test CHANGED
File without changes
test CHANGED
@@ -4,11 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- ```javascript
7
+ ```CharacterData.js
8
-
9
-
10
-
8
+
11
- characters={
9
+ characters ={
12
10
 
13
11
  "主人公":{
14
12
 
@@ -26,14 +24,680 @@
26
24
 
27
25
  Damage(standEnemy[characters["主人公"].partyid],getDamage);
28
26
 
27
+ //console.log("aaa");
28
+
29
+ EnemySetting(characters["主人公"].partyid);
30
+
31
+ console.log(enemystetas.length);
32
+
29
33
  },
30
34
 
31
35
  },
32
36
 
37
+ SapportDate:{
38
+
39
+ discription:"SCORE上昇量1%up",
40
+
41
+ Sap:function(){
42
+
43
+ if(updatecounter % fps_*3 === 0){
44
+
45
+ for(var i=0;i<4;i++){
46
+
47
+ if(partystetas[i].Hp < partystetas[i].maxHP)
48
+
49
+ partystetas[i].Hp += 50;
50
+
51
+ }
52
+
53
+ }
54
+
55
+ }
56
+
57
+ },
58
+
59
+ Dam:function(){
60
+
61
+ Damage(this.partyid,getDamage);
62
+
63
+ },
64
+
65
+ Date:new CharacterData(
66
+
67
+ "img/characters/sprite_char1.jpg",//イメージuri
68
+
69
+ 0,//ID
70
+
71
+ "主人公",//表示名--パーティーデータ取得時に主キーにしてユーザー毎のキャラステータスを取得?
72
+
73
+ 1100,//最大HP
74
+
75
+ 1500,//攻撃力
76
+
77
+ 800,//防御力
78
+
79
+ "atk",//タイプ
80
+
81
+ "ヒューマン",//種族
82
+
83
+ "SR"//レアリティ
84
+
85
+ ),
86
+
87
+ },
88
+
89
+ "朱雀":{
90
+
91
+ partyid:0,
92
+
93
+ AttackDate:{
94
+
95
+ discription:"ターゲットに通常攻撃",
96
+
33
- ......}
97
+ count:10,
98
+
99
+ Atk:function(){
100
+
101
+ },
102
+
103
+ },
104
+
105
+ SapportDate:{
106
+
107
+ discription:"SCORE上昇量1%up",
108
+
109
+ Sap:function(){
110
+
111
+ if(updatecounter % fps_*5 === 0){
112
+
113
+ score_ += 10;
114
+
115
+ }
116
+
117
+ }
118
+
119
+ },
120
+
121
+ Dam:function(){
122
+
123
+ Damage(this.partyid,getDamage);
124
+
125
+ },
126
+
127
+ Date:new CharacterData(
128
+
129
+ "img/characters/sprite_char2.jpg",
130
+
131
+ 1,
132
+
133
+ "ヒロイン",
134
+
135
+ 1010,
136
+
137
+ 1020,
138
+
139
+ 200,
140
+
141
+ "enh",
142
+
143
+ "ヒューマン",
144
+
145
+ "SR"
146
+
147
+ ),
148
+
149
+ },
150
+
151
+ "白虎":{
152
+
153
+ partyid:0,
154
+
155
+ AttackDate:{
156
+
157
+ discription:"ターゲットに通常攻撃",
158
+
159
+ count:10,
160
+
161
+ Atk:function(){
162
+
163
+ console.log("aaap");
164
+
165
+ },
166
+
167
+ },
168
+
169
+ SapportDate:{
170
+
171
+ discription:"SCORE上昇量5%up",
172
+
173
+ Sap:function(){
174
+
175
+ if(updatecounter % fps_*3 === 0)
176
+
177
+ member_combCount[characters["プレイヤー"].partyid]+=1;
178
+
179
+ }
180
+
181
+ },
182
+
183
+ Dam:function(){
184
+
185
+ Damage(this.partyid,getDamage);
186
+
187
+ },
188
+
189
+ Date:new CharacterData(
190
+
191
+ "img/characters/sprite_char3.jpg",
192
+
193
+ 1,
194
+
195
+ "プレイヤー",
196
+
197
+ 1010,
198
+
199
+ 1020,
200
+
201
+ 200,
202
+
203
+ "enh",
204
+
205
+ "ヒューマン",
206
+
207
+ "SR"
208
+
209
+ ),
210
+
211
+ },
212
+
213
+ "玄武":{
214
+
215
+ partyid:0,
216
+
217
+ AttackDate:{
218
+
219
+ discription:"ターゲットに通常攻撃",
220
+
221
+ count:10,
222
+
223
+ Atk:function(){
224
+
225
+ console.log("捕ったど~");
226
+
227
+ },
228
+
229
+ },
230
+
231
+ SapportDate:{
232
+
233
+ discription:"SCORE上昇量5%up",
234
+
235
+ Sap:function(){
236
+
237
+ //console.log("Support3");
238
+
239
+ }
240
+
241
+ },
242
+
243
+ Dam:function(){
244
+
245
+ console.log("ダメージ受けたなり~");
246
+
247
+ Damage(this.partyid,getDamage);
248
+
249
+ },
250
+
251
+ Date:new CharacterData(
252
+
253
+ "img/characters/sprite_char3.jpg",
254
+
255
+ 1,
256
+
257
+ "玄武",
258
+
259
+ 1300,
260
+
261
+ 1520,
262
+
263
+ 300,
264
+
265
+ "def",
266
+
267
+ "オーガ",
268
+
269
+ "SSR"
270
+
271
+ ),
272
+
273
+ },
274
+
275
+ };
276
+
277
+
278
+
279
+ function EnemySetting(num){
280
+
281
+ if(standEnemy[num].Hp <= 0){
282
+
283
+ if(enemystetas.length > 0){
284
+
285
+ standEnemy[num]=(enemystetas.shift());
286
+
287
+ standEnemy[num].partyid = num;
288
+
289
+ }
290
+
291
+ }
292
+
293
+ }
34
294
 
35
295
  ```
36
296
 
297
+ ```characterClass.js
298
+
299
+ var
300
+
301
+ member_size_X = member_size_Y=32,//サイズ
302
+
303
+ partyspritesize_W=288,partyspritesize_H=32,
304
+
305
+ Damagestetas={
306
+
307
+ damage_:0,
308
+
309
+ type_:"ATK"//攻撃者のタイプ
310
+
311
+ },
312
+
313
+ getDamage=0;
314
+
315
+ //キャラクターデータクラス
316
+
317
+ function CharacterData(img,id,name,maxhp,maxpow,maxdeff,type,race,rera){
318
+
319
+ this.img=new Image(),
320
+
321
+ this.img.src=img;
322
+
323
+ this.id=id;
324
+
325
+ this.name=name;
326
+
327
+ this.Hp=maxhp;
328
+
329
+ this.Pow=maxpow;
330
+
331
+ this.Deff=maxdeff;
332
+
333
+ this.Type=type;
334
+
335
+ this.Race=race;
336
+
337
+ this.Rare=rera;
338
+
339
+
340
+
341
+ this.waitSprite = new AnimSprite(this.img,0,0,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
342
+
343
+ this.attackSprite= new AnimSprite(this.img,member_size_X*3,0,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
344
+
345
+ this.skillSprite= new AnimSprite(this.img,0,member_size_Y*2,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
346
+
347
+ this.damageSprite= new AnimSprite(this.img,0,member_size_Y*3,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
348
+
349
+ this.deadSprite= new AnimSprite(this.img,192,160,partyspritesize_W,partyspritesize_H,member_size_X,member_size_Y,3,1);
350
+
351
+
352
+
353
+ this.motionsprite= this.waitSprite ;
354
+
355
+
356
+
357
+ this.Atkfunction = function(atkfunc){
358
+
359
+ atkfunc();
360
+
361
+ };
362
+
363
+
364
+
365
+ this.Damagefunction=function(damagefunc){
366
+
367
+ damagefunc()
368
+
369
+ };
370
+
371
+
372
+
373
+ this.Sapportfunction=function(sapportfunc){
374
+
375
+ sapportfunc();
376
+
377
+ };
378
+
379
+ }
380
+
381
+
382
+
383
+
384
+
385
+ //基本的なダメージ処理
386
+
387
+ var
388
+
389
+ Damage = function(member,damage){
390
+
391
+ member.Hp -= damage;
392
+
393
+ },
394
+
395
+ //キャラ描画
396
+
397
+ Characterdtaw = function(charax_,charay_,sprite_){
398
+
399
+ sprite_.animdraw(ctx,charax_,charay_);
400
+
401
+ };
402
+
403
+
404
+
405
+ function charinit(){//呼び出し方の例
406
+
407
+ var
408
+
409
+ i,
410
+
411
+
412
+
413
+ chara1 = characters["主人公"],
414
+
415
+ chara2 = characters["ヒロイン"];
416
+
417
+
418
+
419
+
420
+
421
+ chara1.Date.Atkfunction(chara1.AttackDate.Atk);
422
+
423
+ chara2.Date.Sapportfunction(chara1.SapportDate.Sap);
424
+
425
+
426
+
427
+
428
+
429
+ }
430
+
431
+
432
+
433
+ function SetDamagest(Damagest,damage_,type_){
434
+
435
+ Damagest.damage_ = damage_;
436
+
437
+ Damagest.type_ = type_;
438
+
439
+
440
+
441
+ return Damagest;
442
+
443
+ }
444
+
445
+
446
+
447
+ function DamageCol(stetas_){
448
+
449
+ var getdamage;
450
+
451
+ getdamage = stetas_.damage_;//ダメージ計算
452
+
453
+
454
+
455
+ return getdamage;
456
+
457
+ }
458
+
459
+
460
+
461
+
462
+
463
+ ```
464
+
465
+ ```main.js
466
+
467
+ var
468
+
469
+ //////////////////////////////////////////////パーティオブジェクト/////////////////////////////////////////////////////
470
+
471
+ party=[
472
+
473
+ characters["主人公"],
474
+
475
+ characters["ヒロイン"],
476
+
477
+ characters["プレイヤー"],
478
+
479
+ characters["玄武"]
480
+
481
+ ],//4人
482
+
483
+ partystetas=[],
484
+
485
+
486
+
487
+ i=0,
488
+
489
+ STEPTIME = 10,
490
+
491
+ step=0;
492
+
493
+
494
+
495
+ function Partyinit(){
496
+
497
+ for(i=0;i<4;i++){
498
+
499
+ party[i].partyid = i;
500
+
501
+ partystetas[i]={
502
+
503
+ maxHP:party[i].Date.Hp,
504
+
505
+ Hp:party[i].Date.Hp,
506
+
507
+ maxpow:party[i].Date.Pow*5,
508
+
509
+ Pow:party[i].Date.Pow,
510
+
511
+ maxDef:party[i].Date.Deff*5,
512
+
513
+ def:party[i].Date.Deff,
514
+
515
+ specialgage:0
516
+
517
+ };
518
+
519
+ memberView[i]= {
520
+
521
+ hpvar:document.getElementById("HPbox_member"+(i+1)),
522
+
523
+ combcount:document.getElementById("Comb_member"+(i+1)),
524
+
525
+ iconimg:document.getElementById("membericonimg"+(i+1)),
526
+
527
+ Hp:document.getElementById("member"+(i+1)+"_stetas")
528
+
529
+ };
530
+
531
+ }
532
+
533
+ }
534
+
535
+
536
+
537
+ function getPartyMemberActionSkill(num){
538
+
539
+ if(partystetas[num].Hp > 0){//生存中だけ呼び出し
540
+
541
+ party[num].Date.Atkfunction(party[num].AttackDate.Atk);
542
+
543
+ }
544
+
545
+ }
546
+
547
+
548
+
549
+ function getPartyMemberSapportSkill(num){
550
+
551
+ party[num].Date.Sapportfunction(party[num].SapportDate.Sap);
552
+
553
+ }
554
+
555
+
556
+
557
+ function getPartyMemberDamageSkill(num){
558
+
559
+ party[num].Date.Dam();
560
+
561
+ }
562
+
563
+
564
+
565
+ function PartyStetasCheck(i){
566
+
567
+ if(partystetas[i].Hp <= 0){
568
+
569
+ party[i].Date.motionsprite=party[i].Date.deadSprite;
570
+
571
+
572
+
573
+ $("#member"+(i+1)+"-icon").addClass("deth");
574
+
575
+
576
+
577
+ $("#member"+(i+1)+"_stetas").css('color', 'Red');
578
+
579
+ $("#HPbox_member"+(i+1)).removeClass("alive");
580
+
581
+ $("#HPbox_member"+(i+1)).addClass("dead");
582
+
583
+
584
+
585
+ $("#member"+(i+1)+"-icon").removeClass("partymembers-icon");
586
+
587
+ partystetas[i].Hp++;
588
+
589
+ /*蘇生処理*/
590
+
591
+ if(partystetas[i].Hp > 0){
592
+
593
+
594
+
595
+ partystetas[i].Hp = partystetas[i].maxHP/2;
596
+
597
+ $("#member"+(i+1)+"-icon").addClass("partymembers-icon");
598
+
599
+ $("#member"+(i+1)+"-icon").removeClass("deth");
600
+
601
+
602
+
603
+ $("#HPbox_member"+(i+1)).addClass("alive");
604
+
605
+ $("#HPbox_member"+(i+1)).removeClass("dead");
606
+
607
+
608
+
609
+ }
610
+
611
+ if(Math.abs(partystetas[i].Hp) <= partystetas[i].maxHP){
612
+
613
+ memberView[i].iconimg.style.opacity=1-(-partystetas[i].Hp/partystetas[i].maxHP);
614
+
615
+ memberView[i].hpvar.style.width = (-partystetas[i].Hp/partystetas[i].maxHP)*100 +"%";
616
+
617
+ }
618
+
619
+ }else{
620
+
621
+ if(party[i].Date.motionsprite === party[i].Date.deadSprite){
622
+
623
+ party[i].Date.motionsprite = party[i].Date.waitSprite;
624
+
625
+ }
626
+
627
+ if($("#HPbox_member"+(i+1)).hasClass("dead")){
628
+
629
+ $("#HPbox_member"+(i+1)).removeClass("dead");
630
+
631
+ $("#HPbox_member"+(i+1)).addClass("alive");
632
+
633
+ }if( $("#member"+(i+1)+"-icon").hasClass("deth")){
634
+
635
+ $("#member"+(i+1)+"-icon").addClass("partymembers-icon");
636
+
637
+ $("#member"+(i+1)+"-icon").removeClass("deth");
638
+
639
+ }
640
+
641
+
642
+
643
+ $("#member"+(i+1)+"_stetas").css('color', 'Black');
644
+
645
+ memberView[i].hpvar.style.width = (partystetas[i].Hp/partystetas[i].maxHP)*100 +"%";
646
+
647
+ }
648
+
649
+ if(partystetas[i].Hp > partystetas[i].maxHP)partystetas[i].Hp = partystetas[i].maxHP;
650
+
651
+ }
652
+
653
+
654
+
655
+ function Party_Update(){
656
+
657
+ if(GameStage !== "GameOver"){
658
+
659
+ for(i=0;i<4;i++){
660
+
661
+ getPartyMemberSapportSkill(i);//Supportを毎時間呼び出す
662
+
663
+ PartyStetasCheck(i);
664
+
665
+ memberView[i].Hp.innerHTML=partystetas[i].Hp;
666
+
667
+ }
668
+
669
+ //全員の状態を調べる
670
+
671
+ for(i=0;i<4;i++){
672
+
673
+ if(partystetas[i].Hp > 0){
674
+
675
+ break;
676
+
677
+ }
678
+
679
+ }if(i===4) GameStage="GameOver";
680
+
681
+ }}
682
+
683
+
684
+
685
+
686
+
687
+ function Party_Draw(){
688
+
689
+ for(i=0;i<4;i++){//パーティメンバー描画
690
+
691
+ Characterdtaw(140+markerdistance,45+i*20,party[i].Date.motionsprite);//パーティー
692
+
693
+ }
694
+
695
+ }
696
+
697
+
698
+
699
+ ```
700
+
37
701
 
38
702
 
39
703
  この時、Atk:function()の中で書いている『characters["主人公"]』の部分を変数にして書きたいです。

1

誤字修正

2018/11/12 10:42

投稿

mijinko889
mijinko889

スコア33

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ###やりたいこと
1
+ ###前提
2
2
 
3
3
  javascriptで記述した以下のようなコードがあるとします。
4
4