-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
121 lines (104 loc) · 2.17 KB
/
main.cpp
File metadata and controls
121 lines (104 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "common.h"
#include "view.h"
#include "tetris.h"
#include "main.h"
void debug_output();
void check_buttons();
void reset_buttons();
int cnt=0;
int button[4];
states state;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
SetMainWindowText("tetris");
SetGraphMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16);
if( DxLib_Init() == -1 || SetDrawScreen(-2) != 0 )
return -1;
switch_state(DEMONSTRATION);
while(ProcessMessage() == 0)
{
DrawBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, COLOR_BLACK, TRUE);
clsDx();
check_buttons();
switch(state)
{
case DEMONSTRATION:
draw_appearance();
if(cnt%10==0)
demo();
draw_block();
draw_dialogue("DEMONSTRATION");
if(button[BUTTON_ROTATE]==1)
switch_state(PLAYING);
break;
case PLAYING:
tetris_update();
draw_appearance();
draw_block();
draw_next_block();
break;
case GAMEOVER:
draw_appearance();
draw_block();
draw_dialogue("GAMEOVER");
if(button[BUTTON_ROTATE]==1)
switch_state(DEMONSTRATION);
break;
}
debug_output();
ScreenFlip();
cnt++;
}
DxLib_End();
return 0 ;
}
// デバッグ用の出力. ボタンが押されてるかなどを表示.
void debug_output()
{
int i;
char buf[20];
sprintf(buf, "CNT: %06d\n", cnt);
printfDx(buf);
}
// 状態を変える関数. 状態遷移を起こす前の初期化などに使う.
void switch_state(states next_state)
{
switch(next_state)
{
case DEMONSTRATION:
init_block();
state = DEMONSTRATION;
break;
case PLAYING:
init_block();
init_tetris();
state = PLAYING;
break;
case GAMEOVER:
state = GAMEOVER;
break;
}
}
// ボタンの状態をリセットする.
void reset_buttons()
{
int i;
for(i=0; i<NUM_BUTTON; i++)
{
button[i] = 0;
}
}
// ボタンが入力されているかどうかを取得する.
void check_buttons()
{
int button_input[] = {KEY_INPUT_SEMICOLON, KEY_INPUT_L, KEY_INPUT_K, KEY_INPUT_J};
int i;
for(i=0; i<NUM_BUTTON; i++)
{
if(CheckHitKey(button_input[i]))
button[i] += 1;
else
button[i] = 0;
}
}