合計 昨日 今日

ぷるぷるプログラミング

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年11月24日(金) 18:25
No: 1
(OFFLINE)

 ぷるぷるプログラミング

何のことはないプログラムが面白い。

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年11月24日(金) 20:32
No: 2
(OFFLINE)

 Re: ぷるぷるプログラミング

コード[C++]: 全て選択
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include "DxLib.h"
 
#define  DD_GRAY     85, 85, 85    // 暗い灰色         -1
#define  BLACK        0,  0,  0    // 黒                0
#define  D_RED       28,  0,  0    // 暗い赤            1
#define  D_GREEN      0,128,  0    // 暗い緑            2
#define  D_YELLOW   128,128,  0    // 暗い黄色(深黄色)3
#define  D_BLUE       0,  0,128    // 暗い青            4
#define  D_MAGENTA  128,  0,128    // 暗いマゼンタ      5
#define  D_CYAN       0,128,128    // 暗いシアン        6
 
#define  MD_RED     191, 0,   0    // やや暗い赤             _1
#define  MD_GREEN     0,191,  0    // やや暗い緑             _2
#define  MD_YELLOW  191,191,  0    // やや暗い黄色(黄銅色) _3
#define  MD_BLUE      0,  0,191    // やや暗い青             _4
#define  MD_MAGENTA 191,  0,191    // やや暗いマゼンタ       _5
#define  MD_CYAN      0,191,191    // やや暗いシアン         _6
 
#define  GRAY       192,192,192    // 明るい灰色              7
#define  M_GREEN    192,220,192    // マネーグリーン          8
#define  S_BLUE     166,202,240    // スカイブルー            9
 
#define  CREAM      255,251,240    // クリーム(淡黄色)      246
#define  M_GRAY     160,160,164    // ミディアムグレー        247
#define  D_GRAY     128,128,128    // 暗い灰色                248
#define  RED        255,  0,  0    // 明るい赤                249
#define  GREEN        0,255,  0    // 明るい緑                250
#define  YELLOW     255,255,  0    // 明るい黄色              251
#define  BLUE         0,  0,255    // 明るい青                252
#define  MAGENTA    255,  0,255    // マゼンタ(紫:淡紅色)  253
#define  CYAN         0,255,255    // シアン(水色:輝淡青色)254
#define  WHITE      255,255,255    // 白(最大輝度白色光)    255
 
//------------------------------------------------
#define  KURO        0    // 黒                        0
#define  AKA         1    // 明るい赤                249
#define  MIDORI      2    // 明るい緑                250
#define  KIIRO       3    // 明るい黄色              251
#define  AO          4    // 明るい青                252
#define  MURASAKI    5
#define  MIZUIRO     6
#define  SIRO        7    // 白(最大輝度白色光)    255
#define  D_AKA       8
#define  D_MIDORI    9
#define  D_KIIRO    10
#define  D_AO       11
#define  D_MURASAKI 12
#define  D_MIZUIRO  13
#define  DD_HAIIRO  14
#define  HAIIRO     21
#define  SORAIRO    23
#define  D_HAIIRO   26
 
//-----------------------------------------------------------------------------
// パレットに色をセットする
//-----------------------------------------------------------------------------
void set_pal(int handle)
{
    SetPaletteSoftImage( handle, 0, BLACK, 0 ) ;
    SetPaletteSoftImage( handle, 1, RED, 0 ) ;
    SetPaletteSoftImage( handle, 2, GREEN, 0 ) ;
    SetPaletteSoftImage( handle, 3, YELLOW, 0 ) ;
    SetPaletteSoftImage( handle, 4, BLUE, 0 ) ;
    SetPaletteSoftImage( handle, 5, MAGENTA, 0 ) ;
    SetPaletteSoftImage( handle, 6, CYAN, 0 ) ;
    SetPaletteSoftImage( handle, 7, WHITE, 0 ) ;
 
    SetPaletteSoftImage( handle, 8, D_RED, 0 ) ;
    SetPaletteSoftImage( handle, 9, D_GREEN, 0 ) ;
    SetPaletteSoftImage( handle,10, D_YELLOW, 0 ) ;
    SetPaletteSoftImage( handle,11, D_BLUE, 0 ) ;
    SetPaletteSoftImage( handle,12, D_MAGENTA, 0 ) ;
    SetPaletteSoftImage( handle,13, D_CYAN, 0 ) ;
    SetPaletteSoftImage( handle,14, DD_GRAY, 0 ) ;
 
    SetPaletteSoftImage( handle,15, MD_RED, 0 ) ;
    SetPaletteSoftImage( handle,16, MD_GREEN, 0 ) ;
    SetPaletteSoftImage( handle,17, MD_YELLOW, 0 ) ;
    SetPaletteSoftImage( handle,18, MD_BLUE, 0 ) ;
    SetPaletteSoftImage( handle,19, MD_MAGENTA, 0 ) ;
    SetPaletteSoftImage( handle,20, MD_CYAN, 0 ) ;
 
    SetPaletteSoftImage( handle,21, GRAY, 0 ) ;
    SetPaletteSoftImage( handle,22, M_GREEN, 0 ) ;
    SetPaletteSoftImage( handle,23, S_BLUE, 0 ) ;
    SetPaletteSoftImage( handle,24, CREAM, 0 ) ;
    SetPaletteSoftImage( handle,25, M_GRAY, 0 ) ;
    SetPaletteSoftImage( handle,26, D_GRAY, 0 ) ;
}
 
//-----------------------------------------------------------------------------
// 画像データ
//-----------------------------------------------------------------------------
char img[16][16] ={
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
    { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
    { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },
    { 5, 5, 5, 7, 1, 5, 5, 5, 7, 1, 5, 5, 5, 7, 2, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5 ,5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 },
    { 5, 5, 5, 7,10, 5, 5, 5, 7,10, 5, 5, 5, 7,20, 5 }
};
 
//-----------------------------------------------------------------------------
// エントリポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int handle, i, j, grhandle ;
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
 
    handle = MakePAL8ColorSoftImage( 16, 16 ) ; // 空のパレット画像を作成する
    set_pal(handle);            // パレットに色をセットする
 
    for( j = 0; j < 16; j ++ ){
        for( i = 0; i < 16; i ++ ){
            DrawPixelPalCodeSoftImage( handle, i, j, img[j][i] ) ;  // パレット番号をセット
        }
    }
    grhandle = CreateGraphFromSoftImage( handle ) ;           // グラフィックハンドルを作成
    DeleteSoftImage( handle ) ;    // 使い終わったら解放
 
    DrawExtendGraph( 0, 0, 16*4, 16*4, grhandle, FALSE ) ;    // グラフィックハンドルを描画(四倍に拡大する)
    DeleteGraph( grhandle ) ;      // グラフィックハンドルの削除
 
    WaitKey();      // キー入力待ち
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年11月26日(日) 08:43
No: 3
(OFFLINE)

 Re: ぷるぷるプログラミング

んん、前に書いた記事の編集ができない?!
時間がたつと編集できなくなるのか・・・
まぁ、いけど。
前回は構造体の画像データを表示できたので、今回はキャラ作りです。
つまりドット絵。ぴこぴこ構造体に画像データを打ち込むのがいいのだ、めんどいけど(笑)
それが、ぷるぷるプログラミングなのだ!

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年11月26日(日) 14:42
No: 4
(OFFLINE)

 Re: ぷるぷるプログラミング

コード[C++]: 全て選択
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
122
123
124
125
126
127
128
129
130
131
#include "DxLib.h"
 
#define  DD_GRAY     85, 85, 85    // 暗い灰色         -1
#define  BLACK        0,  0,  0    // 黒                0
#define  D_RED       28,  0,  0    // 暗い赤            1
#define  D_GREEN      0,128,  0    // 暗い緑            2
#define  D_YELLOW   128,128,  0    // 暗い黄色(深黄色)3
#define  D_BLUE       0,  0,128    // 暗い青            4
#define  D_MAGENTA  128,  0,128    // 暗いマゼンタ      5
#define  D_CYAN       0,128,128    // 暗いシアン        6
 
#define  MD_RED     191, 0,   0    // やや暗い赤             _1
#define  MD_GREEN     0,191,  0    // やや暗い緑             _2
#define  MD_YELLOW  191,191,  0    // やや暗い黄色(黄銅色) _3
#define  MD_BLUE      0,  0,191    // やや暗い青             _4
#define  MD_MAGENTA 191,  0,191    // やや暗いマゼンタ       _5
#define  MD_CYAN      0,191,191    // やや暗いシアン         _6
 
#define  GRAY       192,192,192    // 明るい灰色              7
#define  M_GREEN    192,220,192    // マネーグリーン          8
#define  S_BLUE     166,202,240    // スカイブルー            9
 
#define  CREAM      255,251,240    // クリーム(淡黄色)      246
#define  M_GRAY     160,160,164    // ミディアムグレー        247
#define  D_GRAY     128,128,128    // 暗い灰色                248
#define  RED        255,  0,  0    // 明るい赤                249
#define  GREEN        0,255,  0    // 明るい緑                250
#define  YELLOW     255,255,  0    // 明るい黄色              251
#define  BLUE         0,  0,255    // 明るい青                252
#define  MAGENTA    255,  0,255    // マゼンタ(紫:淡紅色)  253
#define  CYAN         0,255,255    // シアン(水色:輝淡青色)254
#define  WHITE      255,255,255    // 白(最大輝度白色光)    255
#define  LD_CYAN      0,150,255    // 少しだけ暗いシアン
 
//-----------------------------------------------------------------------------
// パレットに色をセットする
//-----------------------------------------------------------------------------
void set_pal(int handle)
{
    SetPaletteSoftImage( handle, 0, BLACK, 0 ) ;
    SetPaletteSoftImage( handle, 1, WHITE, 0 ) ;
    SetPaletteSoftImage( handle, 2, RED, 0 ) ;
    SetPaletteSoftImage( handle, 3, D_YELLOW, 0 ) ;
    SetPaletteSoftImage( handle, 4, D_GREEN, 0 ) ;
    SetPaletteSoftImage( handle, 5, LD_CYAN, 0 ) ;
    SetPaletteSoftImage( handle, 6, YELLOW, 0 ) ;
    SetPaletteSoftImage( handle, 7, CYAN, 0 ) ;
 
}
 
//-----------------------------------------------------------------------------
// 画像データ
//-----------------------------------------------------------------------------
char img[32][32] ={
    { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,6,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,6,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,2,2,2,2,0,5,5,7,5,5,6,5,5,7,5,5,0,0,2,2,2,2,0,0,0,0,0},
    { 0,0,0,7,7,7,7,4,7,7,0,5,5,5,5,6,5,5,5,5,0,0,7,7,4,7,7,7,7,7,0,0},
    { 0,0,0,7,7,7,7,4,7,7,0,5,5,5,5,6,5,5,5,5,0,0,7,7,4,7,7,7,7,7,0,0},
    { 0,0,7,7,7,7,7,4,7,7,7,7,7,6,6,6,6,6,6,7,7,7,7,7,4,7,7,7,7,7,7,0},
    { 0,0,7,7,7,7,7,4,7,7,7,7,7,6,6,6,6,6,6,7,7,7,7,7,4,7,7,7,7,7,7,0},
    { 0,7,7,7,7,7,7,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,7,7,7,7,7,7,7},
    { 0,7,7,7,7,7,7,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,7,7,7,7,7,7,7},
    { 0,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7},
    { 0,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7},
    { 0,0,7,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,4,4,4,7,7,0,0},
    { 0,0,7,4,4,4,4,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,4,4,4,7,7,0,0},
    { 0,0,0,4,0,4,4,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,4,0,4,0,0,0,0},
    { 0,0,0,4,0,4,4,4,4,4,4,4,4,4,6,6,6,6,4,4,4,4,4,4,4,4,0,4,0,0,0,0},
    { 0,0,0,4,0,4,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,0,0,0,0,4,0,4,0,0,0,0},
    { 0,0,0,4,0,4,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,0,0,0,0,4,0,4,0,0,0,0},
    { 0,0,0,4,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,4,0,0,0,0},
    { 0,0,0,4,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,4,0,0,0,0},
    { 0,2,2,2,0,4,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,4,0,2,2,2,0,0},
    { 0,2,2,2,0,4,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,4,0,2,2,2,0,0},
    { 0,0,0,0,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,0,0},
    { 0,0,0,0,0,4,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,4,0,0,0,0,0,0},
    { 0,0,2,2,2,2,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,2,2,2,2,0,0,0},
    { 0,0,2,2,2,2,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,2,2,2,2,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int handle, i, j, grhandle ;
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
 
    handle = MakePAL8ColorSoftImage( 32, 32 ) ; // 空のパレット画像を作成する
    set_pal(handle);            // パレットに色をセットする
 
    //ドット絵を描く
    for( j = 0; j < 32; j ++ ){
        for( i = 0; i < 32; i ++ ){
            DrawPixelPalCodeSoftImage( handle, i, j, img[j][i] ) ;
        }
    }
    grhandle = CreateGraphFromSoftImage( handle ) ;           // グラフィックハンドルを作成
    DeleteSoftImage( handle ) ;    // 使い終わったら解放
 
    int x=0, y=100;
    DrawExtendGraph( x, y, x+30*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
 
    x=100, y=0;
    DrawExtendGraph( x, y, x+30*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
   
    x=200; y=200;
    DrawExtendGraph( x, y, x+30*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
   
    DrawString(300, 100, "ぶんぶんぶんハチが飛ぶ", GetColor(WHITE));
 
    DrawString(220, 100, "))", GetColor(WHITE));
    DrawString(120, 200, "))", GetColor(WHITE));
    DrawString(320, 300, "))", GetColor(WHITE));
 
    DeleteGraph( grhandle ) ;      // グラフィックハンドルの削除
 
    WaitKey();      // キー入力待ち
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年12月02日(土) 19:58
No: 5
(OFFLINE)

 Re: ぷるぷるプログラミング

前回は、画像データを数字で書いたけど、
見にくい!読みにくい!ので、
アルファベット1文字に置き換えてみました。
格段に見やすくなったぜ!!やったね!!


コード[C++]: 全て選択
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "DxLib.h"
 
#define  DD_GRAY     85, 85, 85    // 暗い灰色         -1
#define  BLACK        0,  0,  0    // 黒                0
#define  D_RED       28,  0,  0    // 暗い赤            1
#define  D_GREEN      0,128,  0    // 暗い緑            2
#define  D_YELLOW   128,128,  0    // 暗い黄色(深黄色)3
#define  D_BLUE       0,  0,128    // 暗い青            4
#define  D_MAGENTA  128,  0,128    // 暗いマゼンタ      5
#define  D_CYAN       0,128,128    // 暗いシアン        6
 
#define  MD_RED     191,  0,  0    // やや暗い赤             _1
#define  MD_GREEN     0,191,  0    // やや暗い緑             _2
#define  MD_YELLOW  191,191,  0    // やや暗い黄色(黄銅色) _3
#define  MD_BLUE      0,  0,191    // やや暗い青             _4
#define  MD_MAGENTA 191,  0,191    // やや暗いマゼンタ       _5
#define  MD_CYAN      0,191,191    // やや暗いシアン         _6
 
#define  GRAY       192,192,192    // 明るい灰色              7
#define  M_GREEN    192,220,192    // マネーグリーン          8
#define  S_BLUE     166,202,240    // スカイブルー            9
 
#define  CREAM      255,251,240    // クリーム(淡黄色)      246
#define  M_GRAY     160,160,164    // ミディアムグレー        247
#define  D_GRAY     128,128,128    // 暗い灰色                248
#define  RED        255,  0,  0    // 明るい赤                249
#define  GREEN        0,255,  0    // 明るい緑                250
#define  YELLOW     255,255,  0    // 明るい黄色              251
#define  BLUE         0,  0,255    // 明るい青                252
#define  MAGENTA    255,  0,255    // マゼンタ(紫:淡紅色)  253
#define  CYAN         0,255,255    // シアン(水色:輝淡青色)254
#define  WHITE      255,255,255    // 白(最大輝度白色光)    255
#define  L_BLUE       0,150,255    // ライトブルー
 
//-----------------------------------------------------------------------------
// パレットに色をセットする
//-----------------------------------------------------------------------------
void set_pal(int handle)
{
    SetPaletteSoftImage( handle, 0, BLACK, 0 ) ;
    SetPaletteSoftImage( handle, 1, WHITE, 0 ) ;
    SetPaletteSoftImage( handle, 2, RED, 0 ) ;
    SetPaletteSoftImage( handle, 3, D_YELLOW, 0 ) ;
    SetPaletteSoftImage( handle, 4, D_GREEN, 0 ) ;
    SetPaletteSoftImage( handle, 5, L_BLUE, 0 ) ;
    SetPaletteSoftImage( handle, 6, YELLOW, 0 ) ;
    SetPaletteSoftImage( handle, 7, CYAN, 0 ) ;
 
}
 
//-----------------------------------------------------------------------------
// 画像データ
//-----------------------------------------------------------------------------
char img[32][33] ={
    "              b b               ",
    "              b b               ",
    "           bbbbYbbbb            ",
    "           bbbbYbbbb            ",
    "     RRRR bbCbbYbbCbb  RRRR     ",
    "     RRRR bbCbbYbbCbb  RRRR     ",
    "   CCCCgCC bbbbYbbbb  CCgCCCCC  ",
    "   CCCCgCC bbbbYbbbb  CCgCCCCC  ",
    "  CCCCCgCCCCCYYYYYYCCCCCgCCCCCC ",
    "  CCCCCgCCCCCYYYYYYCCCCCgCCCCCC ",
    " CCCCCCgggggggYYYYYggggggCCCCCCC",
    " CCCCCCgggggggYYYYYggggggCCCCCCC",
    " CCCCCCCCCCCCCYYYYCCCCCCCCCCCCCC",
    " CCCCCCCCCCCCCYYYYCCCCCCCCCCCCCC",
    "  CgggggggggggYYYYggggggggggCC  ",
    "  CgggggggggggYYYYggggggggggCC  ",
    "   gggggggggggYYYYgggggggg g    ",
    "   g gggggggggYYYYgggggggg g    ",
    "   g g     YYYYYYYYYY    g g    ",
    "   g g     YYYYYYYYYY    g g    ",
    "   g g   yyyyyyyyyyyyyy  g g    ",
    "   g g   yyyyyyyyyyyyyy  g g    ",
    " RRR g  YYYYYYYYYYYYYYYY g RRR  ",
    " RRR g  YYYYYYYYYYYYYYYY g RRR  ",
    "     g   yyyyyyyyyyyyyy  g      ",
    "     g   yyyyyyyyyyyyyy  g      ",
    "  RRRR    YYYYYYYYYYYY   RRRR   ",
    "  RRRR    YYYYYYYYYYYY   RRRR   ",
    "           yyyyyyyyyy           ",
    "           yyyyyyyyyy           ",
    "              YYYY              ",
    "              YYYY              "
};
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int handle, grhandle ;
    int i, j, x, y, c;
    int color = GetColor(WHITE);
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
 
    handle = MakePAL8ColorSoftImage( 32, 32 ) ; // 空のパレット画像を作成する
    set_pal(handle);            // パレットに色をセットする
 
    //ドット絵を描く
    for( j = 0; j < 32; j ++ ){
        for( i = 0; i < 32; i ++ ){
            if(img[j][i]==' ') c=0;
            if(img[j][i]=='R') c=2;
            if(img[j][i]=='y') c=3;
            if(img[j][i]=='g') c=4;
            if(img[j][i]=='b') c=5;
            if(img[j][i]=='Y') c=6;
            if(img[j][i]=='C') c=7;
           
            DrawPixelPalCodeSoftImage( handle, i, j, c ) ;
        }
    }
    grhandle = CreateGraphFromSoftImage( handle ) ;           // グラフィックハンドルを作成
    DeleteSoftImage( handle ) ;    // 使い終わったら解放
 
    x=150; y=0;
    DrawExtendGraph( x, y, x+32*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
   
    x=0; y=100;
    DrawExtendGraph( x, y, x+32*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
 
    x=200; y=200;
    DrawExtendGraph( x, y, x+32*4, y+32*4, grhandle, FALSE ) ;    // 描画(4倍に拡大する)
   
    DrawString(350, 150, "ぶんぶんぶんハチが飛ぶ", color);
 
    DrawString(300,  50, "))", color);
    DrawString(150, 150, "))", color);
    DrawString(350, 250, "))", color);
 
    DeleteGraph( grhandle ) ;      // グラフィックハンドルの削除
 
    WaitKey();      // キー入力待ち
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年12月05日(火) 14:13
No: 6
(OFFLINE)

 Re: ぷるぷるプログラミング

懐かしのN88BASICのゲームを移植したよ。
動きもまんまBASICしてるよ。これは笑える。
砲台もカッコいい宇宙飛行機みたいに見えてくる。
ではこの射撃ゲームを楽しんでください。

コード[C++]: 全て選択
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
#include "DxLib.h"
 
#define  WHITE      255,255,255    // 白(最大輝度白色光)    255
#define  RED        255,  0,  0    // 明るい赤                249
#define  YELLOW     255,255,  0    // 明るい黄色              251
 
#define  KARASU     20             // カラスの出現数
 
//-----------------------------------------------------------------------------
// ゲームオーバーの処理
//-----------------------------------------------------------------------------
int owari(int s)
{
    if( s > (KARASU/2)){
        DrawString(15*8, 10*16, "あなたの勝ち!", GetColor(YELLOW));
    }else {
        DrawString(15*8, 10*16, "あなたの負け!", GetColor(RED));
    }
    DrawString(16*8, 12*16, "[ESC] 終了", GetColor(WHITE));
    ScreenFlip();
 
    WaitTimer(1000);                    // 少し待たせる
 
    if(WaitKey()==KEY_INPUT_ESCAPE){    // ESCでゲーム終了
        return 1;
    }
    return 0;                           // ゲーム継続
}
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int  color = GetColor(WHITE);// 文字の色
    int  x=0, y=15;              // x*8,y*16の文字座標
    int  s=0;        // 撃ち落としたカラスの数
    int  n=1;        // カラスの出現数
    int  hit=0;      // 弾が命中した
    int  sw=0;       // 弾の発射
    int  key;        // キー押し下げ
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    while(ProcessMessage() == 0 && ClearDrawScreen() == 0 )
    {
        DrawString(29*8, 15*16, " A ", color);
        DrawString(29*8, 16*16, "MIM", color);
        DrawString( 0*8, 17*16, "-------------------------------------", color);
 
        key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
 
        if( key & PAD_INPUT_9 )  break; // ESCで終了
        if( key & PAD_INPUT_10 ) sw=1;  // SPACEで弾を発射
 
        if(sw==1){      // 弾を発射
            y--;
            if(y<0){        // 弾が上まで来たら
                if(x==30){  // 当たり判定
                    DrawString(30*8, 0, "X", GetColor(RED));
                    s++; x=40; hit=1;
                }
                sw=0; y=15;
            }
            DrawString(30*8, y*16, "I", color); // 弾を描く
        }
        DrawFormatString(0, 16, color, " %d / %d", s, n ); // 出現数と当った数
       
        if(x>=40){   // カラスが右端まで来たら
            x=0; n++;
        }else {
            x++;
            DrawString(x*8, 0, "W", color);    // 動いてるカラス
        }
        ScreenFlip() ;
 
        if(hit){
            hit=0;
            WaitTimer(100);      // ビープ音のために少し待ってやる
            Beep(700, 800);      // 撃ち落とした時のビープ音を鳴らす
        }else {
            WaitTimer(10);       // ビープ音のために少し待ってやる
            Beep(1300, 60);      // カラスの移動の時のビープ音を鳴らす
        }
        if(n>KARASU){   // カラスが20羽出たら終わり
            if(owari(s)){
                break;  // 終了
            }
            x=0; y=15; s=0; n=1; sw=0;  // ゲームをもう一度やる場合
            WaitTimer(200);             // キー押下げをかわすため少し待つ
        }
    }
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年12月08日(金) 13:30
No: 7
(OFFLINE)

 Re: ぷるぷるプログラミング

おかげさまで大好評!「昔懐かしシリーズ」の、はじまり、はじまり。
またまたN88BASICのゲームを移植しましたよ。
動きもまんまBASICしてるよ。これは笑える。

●内容●
コントロールはカーソルキーで行います(左右のみ)。制限時間は1分で、1つの旗門
をクリアするごとに10点増えます。もし旗門の端にぶつかると、10点減点されます。

●応用●
旗門の幅を広くしたりせまくしたりして、その旗門によって得点を変えたりするともっ
と面白くなります。
また制限時間を変えたりしても楽しめます。
私は旗門をゲートだと勘違いして旗門の真中を通るゲームにしてしまいました。
本来のスキーのように旗門をかわしていくゲームにするのもいいでしょう。(笑)

それでは、このスラロームゲームを楽しんでください。

コード[C++]: 全て選択
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
122
123
/*-----------------------------------------------------------------------------
    2017-12-06(水)
 
    スラローム
 
-----------------------------------------------------------------------------*/
#include "DxLib.h"
 
#define  BLACK        0,  0,  0     // 黒                      0
#define  WHITE      255,255,255     // 白(最大輝度白色光)  255
#define  RED        255,  0,  0     // 明るい赤              249
#define  YELLOW     255,255,  0     // 明るい黄色            251
 
#define  TIME       (60)            // 制限時間(60秒)
#define  WAIT       (150)           // ウェイト
 
//-----------------------------------------------------------------------------
// ゲートの構造体
//-----------------------------------------------------------------------------
struct SGate {
    int x;
    int y;
};
 
//-----------------------------------------------------------------------------
// 制限時間を超えたら
//-----------------------------------------------------------------------------
int owari(int& HiScore, int score, int time)
{
    DrawBox(0, 0, 41*8, 16, GetColor(RED), TRUE);
    DrawFormatString(0, 0, GetColor(YELLOW), "HiScore %d  score %d  time %d", HiScore, score, time/1000);
   
    if(HiScore < score){
        HiScore = score;
        DrawBox(13*8, 6*16, 29*8, 9*16, GetColor(RED), TRUE);
        DrawString(14*8, 7*16, "あなたの勝ち!", GetColor(YELLOW));
    }else {
        DrawBox(13*8, 6*16, 29*8, 9*16, GetColor(WHITE), TRUE);
        DrawString(14*8, 7*16, "あなたの負け!", GetColor(BLACK));
    }
    ScreenFlip() ;
    WaitTimer(1000);
 
    if(WaitKey()==KEY_INPUT_ESCAPE){    // ESCでゲーム終了
        return 1;
    }
    return 0;
}
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int a=20;           // 自分の位置(x座標)
    int rol=0;          // ゲートの配列番号
    int score=0;        // スコア
    int HiScore=0;      // ハイスコア
    int key;            // キー押し下げ
    int start, end, time=0;         // 経過時間用
    int color = GetColor(WHITE);    // 文字色
    SGate gate[25];                 // ゲートのx座標とy座標を保存する構造体
 
    memset(gate, 0, sizeof(SGate)*25);  // 0で初期化(こういう使い方だったっけ?)
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    start = GetNowCount();          // スタート時間を記憶させる
 
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
 
        if( key & PAD_INPUT_9 )  break;   // ESCで終了
        if( key & PAD_INPUT_LEFT )  a--;  // [←]キー
        if( key & PAD_INPUT_RIGHT ) a++;  // [→]キー
 
        if( a<0 ) a=0;          // 左端にきたら
        if( a>39) a=39;         // 右端にきたら
 
        DrawString(a*8, 10*16, "●", color);
 
        gate[rol].x = GetRand(34);      // 乱数でゲートの表示位置(x座標)を決める
        gate[rol].y = 24;               // y座標は一番下から
 
        for(int i=0; i<25 ; i++)        // 当たり判定と全ゲートを表示
        {
            if(((gate[i].x == a)||(gate[i].x == (a+1))||(gate[i].x+6 == a)||(gate[i].x+6 == (a+1))) && (gate[i].y==10)){
                score-=10;
                Beep(3000, 5);          // ゲートの端に当った時
            }
            else if((gate[i].x < a) && ((gate[i].x+6) > a) && (gate[i].y==10)){
                score+=10;
                Beep(1000, 5);          // ゲートをうまく通過した時
            }
            DrawString(gate[i].x*8, gate[i].y*16, "|====|", color);     // ゲートを表示
            gate[i].y--;                // 表示後ゲートのy座標を1つ上にする。
        }
        DrawBox(0, 0, 41*8, 2*16, GetColor(BLACK), TRUE);
        DrawFormatString(0, 0, color, "HiScore %d  score %d  time %d/%d", HiScore, score, time/1000, TIME);
 
        rol++;
        if(rol>24) rol=0;               // ゲートの配列番号をセットしていくため
 
        end  = GetNowCount();           // プレイ時間を計るため
        time = end-start;               // 経過時間を保存
 
        if(time > TIME*1000){           // タイムオーバーの時
            if(owari(HiScore, score, time)){
                break;                  // ゲーム終了
            }
            start = GetNowCount();      // もう一度ゲームをする場合
            a=20; score=0;
            memset(gate, 0, sizeof(SGate)*25);
        }
        ScreenFlip() ;
        WaitTimer(WAIT);                // ゲーム全体のウェイト
    }
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年12月10日(日) 13:43
No: 8
(OFFLINE)

 Re: ぷるぷるプログラミング

大好評!昔なつかしシリーズ第三弾!
その名も「ただ観てるだけ~~~の綱引き」。
やはりC言語の構文は解りやすい。
そして参考にしているN88-BASICはメッチャ難しい。
記述量は少ないのだが、完全なスパゲッティープログラムじゃん・・・
泣きながら「N88互換BASIC for Windows」に打ち込んで実行してます。
もちろん、原文そのままでは動かないので・・・何とか動くようにする。
それからC言語(C++)に移植する。これが楽しい。

コード[C++]: 全て選択
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
/*-----------------------------------------------------------------------------
 
    2017(H29).12/09(土)
 
    綱引きシミュレーション
 
-----------------------------------------------------------------------------*/
#include "DxLib.h"
 
#define WHITE   255,255,255     // 白(最大輝度白色光)       255
#define BLACK     0,  0,  0     // 黒                      0
#define WAIT    (300)           // 全体のウェイト
#define SCORE   (2)             // この得点で勝ち
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int key;
    int r, x=8, s1=0, s2=0;
    int color = GetColor(WHITE);
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
       
        if( key & PAD_INPUT_9 )  break;     // ESCで終了
       
        DrawString(15*8, 1*16, "*-----------*", color);
        DrawString(15*8, 2*16, "|  &  |  $  |", color);
        DrawString(15*8, 3*16, "|-----+-----|", color);
        DrawString(15*8, 4*16, "|     |     |", color);
        DrawString(15*8, 5*16, "*-----------*", color);
        DrawFormatString(15*8, 4*16, color, "   %d  |  %d", s1, s2);
       
        if(GetRand(1)){
            r = 1;
        }else {
            r = -1;
        }
        x=x+r;
        DrawString(x*8, 10*16,"&&&&&&&-----+-----$$$$$$$", color);
        DrawString(0, 11*17, "-------------+-----+-----+-------------", color);
        ScreenFlip();
       
        Beep(3000, 10);Beep(2000, 5);
        WaitTimer(WAIT);
 
        if(x<=1){                       // & の勝ち
            s1++; Beep(1000, 1000); x=8;
        }
        if(x>=15){                      // $ の勝ち
            s2++; Beep(1000, 1000); x=8;
        }
       
        if(s1>=SCORE || s2>=SCORE)      // 2点とった方が勝ち
        {
            DrawBox(16*8, 4*16, 28*8, 5*16, GetColor(BLACK), TRUE);
            DrawFormatString(15*8, 4*16, color, "   %d  |  %d", s1, s2);
            DrawString(16*8, 18*13, "HIT ANY KEY", color);
            DrawString(16*8, 18*15, "ESC:終了", color);
            ScreenFlip();
            if(WaitKey()==KEY_INPUT_ESCAPE){    // ESCでゲーム終了
                break;
            }
            s1=0; s2=0;
        }
    }
    DxLib_End();    // DXライブラリの後始末
   
    return 0;
}

Name: どぶろく
[URL]
上級者(17,244 ポイント)
Date: 2017年12月13日(水) 14:08
No: 9
(OFFLINE)

 Re: ぷるぷるプログラミング

では、さっそく、大好評の第4弾、発射~~~~~~~~~~~~~~!!
今回のは互換BASICでは動かせなかった。
本の文章と写真とBASICのソースから推察してみたが分からない・・・
しかたがないので、こうやったらいいんじゃないかプログラムになりました。
けっこう長いプログラムになりました。
でも、なぜかしら操作性が悪いんだよね。
しかしN88-BASICだと思えば楽しい操作性です(笑)

●目的●
左上から右下の出口に向かって、どのくらいの時間で出られるかを計ります。

●内容●
コントロールキーはカーソルキー(上、下、左、右)によって行います。
一定時間ごとに乱数によって爆弾を移動して表示しています。これにぶつからずに出口に向かってください。
3回までなら、ぶつかって爆発しても大丈夫です。

●応用●
ゲーム中に、ある時間ごとに乱数を使って出口を変えても面白いと思います。


コード[C++]: 全て選択
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/*-----------------------------------------------------------------------------
    2017-12-12(火)
 
    出口はどこだ?
 
-----------------------------------------------------------------------------*/
#include "DxLib.h"
 
#define  BLACK        0,  0,  0     // 黒                      0
#define  WHITE      255,255,255     // 白(最大輝度白色光)  255
#define  RED        255,  0,  0     // 明るい赤              249
#define  YELLOW     255,255,  0     // 明るい黄色            251
#define  GREEN        0,255,  0     // 明るい緑              250
 
#define  WAIT       (120)           // 全体のウェイト
#define  KOSUU      (300)           // 爆弾の個数
#define  KAISUU     (4)             // 爆発3回までOK!
#define  IDOU       (50)            // 爆弾移動個数
#define  WAIT_B     (15)            // 爆弾移動までの時間
 
//-----------------------------------------------------------------------------
// 爆弾の構造体
//-----------------------------------------------------------------------------
struct SBakudan {
    int x;
    int y;
};
 
//-----------------------------------------------------------------------------
// 爆弾を配置する
//-----------------------------------------------------------------------------
void make_bakudan(SBakudan bakudan[])
{
    memset(bakudan, 0, sizeof(SBakudan)*(KOSUU+1));
 
    for(int i=0; i<KOSUU; i++){
    lavel:
        bakudan[i].x = GetRand(37)+2;
        bakudan[i].y = GetRand(20)+2;
        if(bakudan[i].x==3 && bakudan[i].y==2){ // 自分の表示位置には無し
            goto lavel;
        }
    }
}
 
//-----------------------------------------------------------------------------
// 枠の描画
//-----------------------------------------------------------------------------
void make_waku()
{
    int White = GetColor(WHITE);    // 文字色
    int Black = GetColor(BLACK);
    int Yellow= GetColor(YELLOW);
 
    for(int x=0; x<40 ;x++){
        DrawString(x*16,  1*16, "■", White);
        DrawString(x*16, 23*16, "■", White);
    }
    for(int y=1; y<23; y++){
        DrawString(0,     y*16, "■", White);
        DrawString(39*16, y*16, "■", White);
    }
    DrawString(36*16, 23*16, "■", Black);
    DrawString(36*16, 24*16+3, "GOAL", Yellow);
}
 
//-----------------------------------------------------------------------------
// 終わりの処理
//-----------------------------------------------------------------------------
int owari(int win, int &rec, int time1, int e)
{
    int White = GetColor(WHITE);    // 文字色
    int Black = GetColor(BLACK);
    int Red   = GetColor(RED);
    int Yellow= GetColor(YELLOW);
 
    if(win==1 && rec<time1){
        win=2;                  // 時間で負けた
    }
    if(e<1) e=1;
    DrawBox(0, 0, 40*16, 1*16, Black, TRUE);
    DrawFormatString(0, 0, Yellow, "rec %d  time %d  あと %d", rec/100, time1/100, e-1) ;
    DrawBox(9*16, 8*16, 19*16, 15*16, Black, TRUE);
    DrawBox(9*16, 8*16, 19*16, 15*16, Yellow, 0);
    DrawString(11*16, 11*16, "Hit Any Key", White);
    DrawString(11*16, 13*16, "[ESC] 終了", White);
 
    if(win==1){
        DrawString(11*16, 9*16,  "あなたの勝ち", Yellow);
        ScreenFlip() ;
        rec = time1;
        Beep(3000, 100);Beep(1000, 100);Beep(1500, 100);
        Beep(3000, 100);Beep(1000, 100);Beep(1500, 100);
    }
    else if(win==2){
        DrawString(11*16, 9*16,  "時間で負けた", Red);
        Beep(2000, 100);Beep(1000, 100);
        ScreenFlip() ;
    }else {
        DrawString(11*16, 9*16,  "あなたの負け", Red);
        ScreenFlip() ;
    }
    WaitTimer(1000);
    if(WaitKey()==KEY_INPUT_ESCAPE){    // [ESC]で終了
        return 1;
    }
    return 0;
}
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White = GetColor(WHITE);    // 文字色
    int Green = GetColor(GREEN);
    int Red   = GetColor(RED);
    int Yellow= GetColor(YELLOW);
    int key;                    // キー押し下げ
    int start, end, time1=0;    // 経過時間用
    int x=3, y=1;
    int e=KAISUU;               // 爆発可回数
    int win;                    // 勝ちか?
    int r;                      // ランダム
    int c=0;                    // 時間かせぎ
    int rec=1000*60*3;          // 記録
    int osita=1;                // 押下げしたか
    SBakudan bakudan[KOSUU+1];  // 爆弾の座標の構造体の配列
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    SetFontThickness(1);                // 文字の太さを1ドットにする
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    make_bakudan(bakudan);          // 爆弾を配置する
    start = GetNowCount();          // スタート時間を記憶させる
 
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
 
        if( key & PAD_INPUT_9 )  break;   // ESCで終了
        if( key & PAD_INPUT_LEFT )  {x--;  osita=1;}// [←]キー
        if( key & PAD_INPUT_RIGHT ) {x++;  osita=1;}// [→]キー
        if( key & PAD_INPUT_UP )    {y--;  osita=1;}// [↑]キー
        if( key & PAD_INPUT_DOWN )  {y++;  osita=1;}// [↓]キー
 
        if( x<1 ) x=1;
        if( x>38) x=38;
        if( y<2 ) y=2;
        if( y>22){
            if(x==36) y=23;     // ゴール
            else      y=22;
        }
        make_waku();            // 枠をつくる
 
        c++;
        if(c>WAIT_B){           // 爆弾を移動させるまでの時間かせぎ
            c=0;
            for(int i=0 ; i<IDOU ; i++){    // 爆弾をランダムに移動させる
                r=GetRand(KOSUU);
                bakudan[r].x = GetRand(37)+2;
                bakudan[r].y = GetRand(20)+2;
            }
        }
        for(int i=0; i<KOSUU; i++){         // 爆弾を表示
            DrawString(bakudan[i].x*16, bakudan[i].y*16, "@", Green);
        }
        for(int i=0; i<KOSUU; i++){         // 当たり判定
            if(x==bakudan[i].x && y==bakudan[i].y){
                DrawString(x*16, y*16, "●", Red); // 爆発
                if(osita==1 ){
                    Beep(3000, 100);
                    osita=0; e--;
                }
                if(e<1){            // 爆死して残り無し
                    win=0;
                    goto lavel;
                }
            }
            else {
                DrawString(x*16, y*16, "○", White);
            }
        }
        DrawFormatString(0, 0, Yellow, "rec %d  time %d  あと %d", rec/100, time1/100, e-1) ;
 
        end  = GetNowCount();           // プレイ時間を計るため
        time1 = end-start;              // 経過時間を保存
 
        if(x==36 && y==23){             // ゴールしたら
            win=1;
lavel:
            if(owari(win, rec, time1, e)){
                break;                  // ゲーム終了
            }
            else {                      // もう一度ゲームをする場合
                x=3; y=1; e=KAISUU; osita=1; c=0;
                make_bakudan(bakudan);
                start = GetNowCount();
            }
        }
        ScreenFlip() ;
        WaitTimer(WAIT);                // ゲーム全体のウェイト
    }
    DxLib_End();    // DXライブラリの後始末
 
    return 0;
}


Return to 52歳からはじめるC言語

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]