テキストメッセージの充実
キー操作の反応性
で改善が図られました
@@ -83,7 +83,10 @@ | ||
83 | 83 | FOnCreateOjama: TOjamaEvent; |
84 | 84 | BackGround: Boolean; |
85 | 85 | FOnScoreEvent: TScoreEvent; |
86 | + FOnTextMessage: TNotifyEvent; | |
87 | + FText: string; | |
86 | 88 | function Check(aItem: TItem): Boolean; |
89 | + procedure SetText(const Value: string); | |
87 | 90 | public |
88 | 91 | Temp: TItem; |
89 | 92 | Item: TItem; |
@@ -95,6 +98,8 @@ | ||
95 | 98 | OjamaColor: TColor; |
96 | 99 | EffectCount: integer; |
97 | 100 | GameParam: TGameParam; |
101 | + TextColor: TColor; | |
102 | + Name: string; | |
98 | 103 | constructor Create; |
99 | 104 | destructor Destroy; override; |
100 | 105 | procedure Start(const Resume: Boolean = false); |
@@ -110,6 +115,9 @@ | ||
110 | 115 | property OnCreateOjama: TOjamaEvent read FOnCreateOjama |
111 | 116 | write FOnCreateOjama; |
112 | 117 | property OnScore: TScoreEvent read FOnScoreEvent write FOnScoreEvent; |
118 | + property Text: string read FText write SetText; | |
119 | + property OnTextMessage: TNotifyEvent read FOnTextMessage | |
120 | + write FOnTextMessage; | |
113 | 121 | end; |
114 | 122 | |
115 | 123 | TForm1 = class(TForm) |
@@ -134,6 +142,7 @@ | ||
134 | 142 | { Private 宣言 } |
135 | 143 | Buffer: TBitmap; |
136 | 144 | TextMessage: string; |
145 | + Limit: TTime; | |
137 | 146 | public |
138 | 147 | { Public 宣言 } |
139 | 148 | Player1, Player2: TPlayer; |
@@ -141,6 +150,7 @@ | ||
141 | 150 | procedure CreateOjama(Sender: TObject; aCount: integer); |
142 | 151 | procedure PlayerScore(Sender: TObject; const GameParam: TGameParam; |
143 | 152 | var Score: integer); |
153 | + procedure PlayerMessage(Sender: TObject); | |
144 | 154 | end; |
145 | 155 | |
146 | 156 | var |
@@ -362,6 +372,10 @@ | ||
362 | 372 | Player2.OnCreateOjama := CreateOjama; |
363 | 373 | Player1.OnScore := PlayerScore; |
364 | 374 | Player2.OnScore := PlayerScore; |
375 | + Player1.OnTextMessage := PlayerMessage; | |
376 | + Player2.OnTextMessage := PlayerMessage; | |
377 | + Player1.Name := 'Player1'; | |
378 | + Player2.Name := 'Player2'; | |
365 | 379 | Rensa := TRensa.Create; |
366 | 380 | Player1.Com := true; { ComPlay } |
367 | 381 | Player11.Checked := Player1.Com; |
@@ -394,22 +408,23 @@ | ||
394 | 408 | Player2.Start(true); |
395 | 409 | Buffer.Canvas.Brush.Color := Color; |
396 | 410 | Buffer.Canvas.FillRect(Rect(0, 0, Buffer.Width, Buffer.Height)); |
411 | + Limit := 0; | |
397 | 412 | Exit; |
398 | 413 | end; |
399 | - if (Player1.State = Shoot) or (Player1.State = Ojama) then | |
400 | - Exit; | |
401 | - case Key of | |
402 | - VK_DOWN: | |
403 | - if Player1.State = Down then | |
414 | + if (Player1.Com = false) and (Player1.State = Down) then | |
415 | + begin | |
416 | + case Key of | |
417 | + VK_DOWN: | |
404 | 418 | Player1.State := Shoot; |
405 | - VK_UP: | |
406 | - Player1.Turn; | |
407 | - VK_LEFT: | |
408 | - Player1.Move(TDirector.Left); | |
409 | - VK_RIGHT: | |
410 | - Player1.Move(Right); | |
419 | + VK_UP: | |
420 | + Player1.Turn; | |
421 | + VK_LEFT: | |
422 | + Player1.Move(TDirector.Left); | |
423 | + VK_RIGHT: | |
424 | + Player1.Move(Right); | |
425 | + end; | |
426 | + Paint; | |
411 | 427 | end; |
412 | - Paint; | |
413 | 428 | end; |
414 | 429 | |
415 | 430 | procedure TForm1.FormPaint(Sender: TObject); |
@@ -502,6 +517,13 @@ | ||
502 | 517 | ItemDraw(Player2.Item); |
503 | 518 | OjamaDraw(Player2); |
504 | 519 | end |
520 | + else if Sender = Player2 then | |
521 | + begin | |
522 | + s := Player1.Ground; | |
523 | + Main; | |
524 | + ItemDraw(Player1.Item); | |
525 | + OjamaDraw(Player1); | |
526 | + end | |
505 | 527 | else |
506 | 528 | begin |
507 | 529 | s := Player1.Ground; |
@@ -508,12 +530,22 @@ | ||
508 | 530 | Main; |
509 | 531 | ItemDraw(Player1.Item); |
510 | 532 | OjamaDraw(Player1); |
533 | + Buffer.Canvas.Brush.Color := clWhite; | |
534 | + s := Player2.Ground; | |
535 | + Main; | |
536 | + ItemDraw(Player2.Item); | |
537 | + OjamaDraw(Player2); | |
511 | 538 | end; |
512 | - if (Player1.State = Stop) and (Player2.State = Stop) then | |
539 | + if Limit > 0 then | |
513 | 540 | begin |
514 | 541 | i := (Buffer.Width - Buffer.Canvas.TextWidth(TextMessage)) div 2; |
515 | 542 | Buffer.Canvas.Brush.Color := Color; |
516 | 543 | Buffer.Canvas.TextOut(i, 0, TextMessage); |
544 | + if Time > Limit then | |
545 | + begin | |
546 | + Limit := 0; | |
547 | + FormPaint(Sender); | |
548 | + end; | |
517 | 549 | end; |
518 | 550 | Canvas.Draw(100, 50, Buffer); |
519 | 551 | end; |
@@ -525,11 +557,29 @@ | ||
525 | 557 | Start1Click(Sender); |
526 | 558 | end; |
527 | 559 | |
560 | +procedure TForm1.PlayerMessage(Sender: TObject); | |
561 | +var | |
562 | + s: TPlayer; | |
563 | +begin | |
564 | + s := Sender as TPlayer; | |
565 | + if s.State = Stop then | |
566 | + begin | |
567 | + if s = Player1 then | |
568 | + TextMessage := 'Player2 WIN !!' | |
569 | + else | |
570 | + TextMessage := 'Player1 WIN !!'; | |
571 | + end | |
572 | + else | |
573 | + TextMessage := s.Text; | |
574 | + Canvas.Font.Color := s.TextColor; | |
575 | + Limit := Time + 1 / (24 * 60 * 60); | |
576 | +end; | |
577 | + | |
528 | 578 | procedure TForm1.PlayerScore(Sender: TObject; const GameParam: TGameParam; |
529 | 579 | var Score: integer); |
530 | 580 | begin |
531 | 581 | with GameParam do |
532 | - Score:=Rensa*Rensa*10+Group*Group*15; | |
582 | + Score := Rensa * Rensa * 10 + Group * Group * 15; | |
533 | 583 | end; |
534 | 584 | |
535 | 585 | procedure TForm1.Start1Click(Sender: TObject); |
@@ -806,6 +856,8 @@ | ||
806 | 856 | if Assigned(FOnScoreEvent) = true then |
807 | 857 | FOnScoreEvent(Self, GameParam, Score); |
808 | 858 | end; |
859 | + if GameParam.Rensa >= 2 then | |
860 | + Text := Name + Format(' %d 連鎖', [GameParam.Rensa]); | |
809 | 861 | end; |
810 | 862 | |
811 | 863 | function TPlayer.Drop: Boolean; |
@@ -871,6 +923,8 @@ | ||
871 | 923 | begin |
872 | 924 | Sleep(3); |
873 | 925 | Application.ProcessMessages; |
926 | + if State <> Down then | |
927 | + break; | |
874 | 928 | end; |
875 | 929 | end; |
876 | 930 | Shoot: |
@@ -947,6 +1001,13 @@ | ||
947 | 1001 | end; |
948 | 1002 | end; |
949 | 1003 | |
1004 | +procedure TPlayer.SetText(const Value: string); | |
1005 | +begin | |
1006 | + FText := Value; | |
1007 | + if Assigned(FOnTextMessage) = true then | |
1008 | + FOnTextMessage(Self); | |
1009 | +end; | |
1010 | + | |
950 | 1011 | procedure TPlayer.Start(const Resume: Boolean); |
951 | 1012 | begin |
952 | 1013 | OjamaClean; |
@@ -959,7 +1020,10 @@ | ||
959 | 1020 | Item.Assign(Temp); |
960 | 1021 | Item.Visible := true; |
961 | 1022 | if Check(Item) = false then |
962 | - State := TState.Stop | |
1023 | + begin | |
1024 | + State := TState.Stop; | |
1025 | + Text := Name + 'Game Over'; | |
1026 | + end | |
963 | 1027 | else |
964 | 1028 | begin |
965 | 1029 | if Com = true then |
@@ -5,7 +5,7 @@ | ||
5 | 5 | <FrameworkType>VCL</FrameworkType> |
6 | 6 | <MainSource>rensa.dpr</MainSource> |
7 | 7 | <Base>True</Base> |
8 | - <Config Condition="'$(Config)'==''">Release</Config> | |
8 | + <Config Condition="'$(Config)'==''">Debug</Config> | |
9 | 9 | <Platform Condition="'$(Platform)'==''">Win32</Platform> |
10 | 10 | <TargetedPlatforms>3</TargetedPlatforms> |
11 | 11 | <AppType>Application</AppType> |