合計 昨日 今日

ぷるぷるプログラミング

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

 ぷるぷるプログラミング

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

Name: どぶろく
[URL]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
Date: 2017年11月26日(日) 08:43
No: 3
(OFFLINE)

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

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

Name: どぶろく
[URL]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
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]
上級者(21,901 ポイント)
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;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2017年12月18日(月) 18:28
No: 10
(OFFLINE)

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

あら、まあ、大好評の第5弾、いくよ~~~~~~!!

●内容●
出走馬数(1~12)を入力します。入力した数だけ馬の構造体をnewで確保してます。
一斉に走り出します。文字幅の8ドット単位ではなく微妙な差がつくんではないかな、
と。いう思惑で、1~21ドット単位の移動にしました。

●応用●
コースの設定を右端まで行ったら向きをかえて戻ってくるようにしたり、
また落馬などの処理を追加すると面白くなるでしょう。

コード[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
//-----------------------------------------------------------------------------
// 2017-12-17(日)
//
// 競馬ゲーム
//
//-----------------------------------------------------------------------------
#include "DxLib.h"
 
#define  WHITE      255,255,255     // 白(最大輝度白色光)  255
#define  YELLOW     255,255,  0     // 明るい黄色            251
 
#define  WAIT       (120)           // 全体のウェイト
 
//-----------------------------------------------------------------------------
// 馬の構造体
//-----------------------------------------------------------------------------
struct SHorse {
    int   x, y;
    char *horse;
 
    SHorse(){               // コンストラクタ
        x=0; y=0;
        horse = "/■^";        // 馬
    }
};
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White  = GetColor(WHITE);
    int Yellow = GetColor(YELLOW);
    int i;
    int n;          // 馬の数
    SHorse *p;      // 構造体へのポインタ
   
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    ChangeFont( "MS ゴシック" ) ;
    SetFontThickness(1);            // 文字の太さを1ドットにする
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
lavel:
    DrawString(250, 150, "馬の数?", Yellow) ;
    n = KeyInputNumber(250+72 , 150 , 12 , 1 , TRUE ) ;
    p = new SHorse[n];
   
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        DrawLine(72*8, 0, 72*8, 400, White);
        for(i=0; i<n ; i++){
            p[i].x += GetRand(20)+1;
            DrawString(p[i].x, i*32+20, p[i].horse, White) ;
        }
        ScreenFlip();
 
        for(i=0; i<n ; i++){
            if(p[i].x > (68*8)){    // ゴール
                delete []p;
                if(WaitKey()==KEY_INPUT_ESCAPE){    // [ESC]で終了
                    goto end;
                }
                goto lavel;
            }
        }
        Beep(1000, 10);Beep(1000, 5);
        WaitTimer(WAIT);                // ゲーム全体のウェイト
    }
    delete []p;     // ねんのため
end:
    DxLib_End();    // DXライブラリの後始末
    return 0;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2017年12月26日(火) 20:01
No: 11
(OFFLINE)

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

ちまたで大反響!思わず手がぷるぷるしてくる。
さあ、老眼と手の震えがきたら、ぷるぷるプログラミングのはじまりだ!

●目的●
どこからか一羽のカラスが大きな柿の木に飛んできて、その実を全部食べてしまいます。

●内容●
カラスの動きは上下左右に変化します。縦横とも乱数によって -1 から 1 の範囲で求めます。
X座標の範囲は 1 から 38 まで、Y座標の範囲は 1 から 26 までとしています。
また、柿を食べると幹と枝が表示されるようにしています。

●応用●
このように乱数を利用して、いろいろなプログラムを考えて下さい。


コード[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
//-----------------------------------------------------------------------------
//  2017-12-26(火)
//
//  柿を食べるカラス
//
//-----------------------------------------------------------------------------
#include "DxLib.h"
#include "memory.h"
 
#define  WHITE      255,255,255     // 白(最大輝度白色光)  255
#define  WAIT       (150)           // 全体のウェイト
 
//-----------------------------------------------------------------------------
// 柿の実
//-----------------------------------------------------------------------------
char kaki[30][80]={
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                    ●●●                                    ",
"                                  ●●●●●                                  ",
"                                ●●●●●●●                                ",
"                              ●●●●●●●●●                              ",
"                            ●●●●●●●●●●●                            ",
"                          ●●●●●●●●●●●●●                          ",
"                        ●●●●●●●●●●●●●●●                        ",
"                      ●●●●●●●●●●●●●●●●●                      ",
"                    ●●●●●●●●●●●●●●●●●●●                    ",
"                  ●●●●●●●●●●●●●●●●●●●●●                  ",
"                ●●●●●●●●●●●●●●●●●●●●●●●                ",
"              ●●●●●●●●●●●●●●●●●●●●●●●●●              ",
"            ●●●●●●●●●●●●●●●●●●●●●●●●●●●            ",
"          ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●          ",
"        ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●        ",
"              ●●●●●●●●●●●●●●●●●●●●●●●●●              ",
"                    ●●●●●●●●●●●●●●●●●●●                    ",
"                          ●●●●●●●●●●●●●                          ",
"                                ●●●●●●●                                ",
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                                                              ",
"                                                                              "
};
//-----------------------------------------------------------------------------
// 柿の木(幹と枝)
//-----------------------------------------------------------------------------
void kakinoki()
{
    int White  = GetColor(WHITE);
   
    DrawLine(316,  96, 288, 464, White);
    DrawLine(316,  96, 336, 464, White);
 
    DrawLine(170, 250, 300, 310, White);
    DrawLine(170, 250, 299, 325, White);
 
    DrawLine(210, 230, 220, 273, White);
    DrawLine(165, 300, 230, 287, White);
 
    DrawLine(450, 240, 325, 270, White);
    DrawLine(450, 240, 329, 281, White);
 
    DrawLine(390, 260, 450, 280, White);
    DrawLine(370, 260, 405, 216, White);
 
    DrawLine(220, 170, 305, 220, White);
    DrawLine(220, 170, 305, 230, White);
 
    DrawLine(240, 155, 253, 190, White);
 
    DrawLine(375, 135, 320, 165, White);
    DrawLine(375, 135, 320, 170, White);
 
    DrawLine(370, 150, 350, 150, White);
}
 
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White  = GetColor(WHITE);
    int i, j, x=0, y=0;
   
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) return -1;
    ChangeFont( "MS ゴシック" ) ;
    SetFontThickness(1);                // 文字の太さを1ドットにする
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        kakinoki();                 // 柿の木の幹と枝を表示
        for(j=0; j<30; j++){        // 柿の実を表示
            for(i=0; i<40; i++){
                DrawString(i*16, j*16, &kaki[j][i*2], White);
            }
        }
        x+=(GetRand(2)-1);
        y+=(GetRand(2)-1);
        if(x<1) { x= 1; }
        if(x>38){ x=38; }
        if(y<1) { y= 1; }
        if(y>26){ y=26; }
       
        if(!memcmp(&kaki[y][x*2], "●", 2)){
            kaki[y][x*2  ] = ' ';
            kaki[y][x*2+1] = ' ';
        }
        DrawString(x*16, y*16, "W", White);
        ScreenFlip();
        WaitTimer(WAIT);                // ゲーム全体のウェイト
    }
    DxLib_End();    // DXライブラリの後始末
    return 0;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2018年1月01日(月) 18:30
No: 12
(OFFLINE)

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

あけましておめでとうございます。
今年も、ぷるぷるプログラミングをよろしくおねがいいたします。
さっそく、ぷるぷるしてプログラムが出来上がりました。

●目的●
道の幅は16文字分あり、そこに乱数によって障害物を発生させます。障害物にぶつかると
ゲームは終了となります。
カーソルキーを使って、ぶつからないようにうまくコントロールしてください。

●応用●
スピードを変えたり、道幅を変えたりしてプログラムを少し変更するだけで、もっと面白
くなります。また、指定回数分だけぶつかったら終了するようにしてもよいでしょう。


コード[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
//-----------------------------------------------------------------------------
//  2018-01-01(月)
//
//  通り抜けゲーム
//
//-----------------------------------------------------------------------------
#include "DxLib.h"
 
#define WHITE       255,255,255     // 白(最大輝度白色光)  255
#define RED         255,  0,  0     // 明るい赤              249
 
//-----------------------------------------------------------------------------
// 障害物の構造体
//-----------------------------------------------------------------------------
struct SObst {
    int x;
    int y;
};
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White = GetColor(WHITE);    // 文字色
    int Red   = GetColor(RED);
    int score=0;        // スコア
    int HiScore=0;      // ハイスコア
    int wait=150;       // ウェイト
    int a=20;           // 自分の初期位置(x座標)
    int rol=0;          // 障害物の配列番号
    int speed=0;        // スピードの変化用
    int key;            // キー押し下げ
    SObst obst[25];     // 障害物のx座標とy座標を保存する構造体
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ) { return -1; };
    ChangeFont( "MS ゴシック" ) ;
    SetFontThickness(1);                // 文字の太さを1ドットにする
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    memset(obst, 0, sizeof(SObst)*25);  // 0で初期化
 
    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<10 ) { a=10; }        // 左端にきたら
        if( a>25 ) { a=25; }        // 右端にきたら
       
        DrawLine(8*9,  0, 8*9,  26*16, White);
        DrawLine(8*27, 0, 8*27, 26*16, White);
        DrawString(a*8, 16, "&", White);
 
        obst[rol].x = GetRand(15)+10;   // 乱数で障害物の表示位置(x座標)を決める
        obst[rol].y = 24;               // y座標は一番下から
 
        for(int i=0; i<25 ; i++){        
            if((obst[i].x==a) && (obst[i].y==1)){       // 当たり判定
                DrawString(obst[i].x*8, obst[i].y*16, "●", Red);
                DrawString(14*8, 10*16, "game over", Red);
                DrawFormatString(29*8, 0, White, "%d  score %d", HiScore, score);
                ScreenFlip() ;
                if(HiScore<score){
                    HiScore=score;
                }
                Beep(700, 1000);
                if(WaitKey()==KEY_INPUT_ESCAPE){
                    goto end;
                }
                memset(obst, 0, sizeof(SObst)*25);
                a=20; rol=0; speed=0; wait=150; score=0;
            }
            DrawString(obst[i].x*8, obst[i].y*16, "*", White); // 障害物を表示
            obst[i].y--;        // 表示後のy座標を1つ上にする。
        }
        rol++;
        if(rol>24){
            rol=0;              // 障害物の配列番号をセットしていくため
        }
        speed++;
        if(speed>60){
            speed=0;
            wait-=10;           // だんだんスピードを速くする
            if(wait<30){ wait=150; }
        }
        score++;
        DrawFormatString(29*8, 0, White, "%d  score %d", HiScore, score);
        ScreenFlip() ;
        WaitTimer(wait);        // ゲーム全体のウェイト
    }
end:
    DxLib_End();        // DXライブラリの後始末
    return 0;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2018年1月06日(土) 17:41
No: 13
(OFFLINE)

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

どうも、ちまたで、うわさの、ぷるぷるプログラミングです。
なんだか今年も絶好調だよ。
ところで文字にハートとかクラブとかあったと思ってたけど無かった・・・。
というわけで、グラフィックを作ってみました。
ちっちゃい絵だね~。もっと大きく作れば良かったなぁ・・・。

●目的●
動いているタマをキャッチして得点を競うゲームです。
前回の避けゲーとは逆の感じ。避けるのではなくキャッチしていきます。

●内容●
ミットのコントロールは、カーソルキー(左右のみ)で行い、制限時間は1分となっています。
タマの発生場所と種類は乱数によって設定します。タマの種類と得点は次のとおりです。

ハート 10点
ダイヤ 20点
クラブ -10点
スペード -20点

●応用●
タマの種類は乱数によって均等に発生していますが、種類によって発生確率をかえてみるとよいでしょう。
例)乱数を1から10の範囲で発生させて、その値によって次のようにします。

1~2 ダイヤ
3~6 ハート
7~9 クラブ
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
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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
//-----------------------------------------------------------------------------
//  2018-01-03(水)
//
//  キャッチゲーム
//
//-----------------------------------------------------------------------------
#include "DxLib.h"
 
#define WHITE       255,255,255     // 白(最大輝度白色光)    255
#define CYAN          0,255,255     // シアン(水色:輝淡青色)254
#define MAGENTA     255,  0,255     // マゼンタ(紫:淡紅色)  253
#define BLUE          0,  0,255     // 明るい青                252
#define YELLOW      255,255,  0     // 明るい黄色              251
#define GREEN         0,255,  0     // 明るい緑                250
#define RED         255,  0,  0     // 明るい赤                249
#define BLACK         0,  0,  0     // 黒                        0
 
#define WAIT        (130)           // 全体のウェイト
#define TIME        (60)            // 制限時間(60秒)
 
//-----------------------------------------------------------------------------
// マークの構造体
//-----------------------------------------------------------------------------
struct SMark {
    int x;
    int y;
    int m;  // マークの種類(0~3を入れる)
};
 
//-----------------------------------------------------------------------------
// マーク(ハート、ダイヤ、クラブ、スペード)
//-----------------------------------------------------------------------------
char g_img1[16][9] ={
    "        ",
    "        ",
    "        ",
    "        ",
    " RR  RR ",
    "RRR  RRR",
    "RRRRRRRR",
    "RRRRRRRR",
    "RRRRRRRR",
    "RRRRRRRR",
    " RRRRRR ",
    " RRRRRR ",
    "  RRRR  ",
    "  RRRR  ",
    "   RR   ",
    "        "
};
 
char g_img2[16][9] ={
    "        ",
    "   YY   ",
    "   YY   ",
    "  YYYY  ",
    "  YYYY  ",
    " YYYYYY ",
    " YYYYYY ",
    "YYYYYYYY",
    "YYYYYYYY",
    " YYYYYY ",
    " YYYYYY ",
    "  YYYY  ",
    "  YYYY  ",
    "   YY   ",
    "   YY   ",
    "        "
};
 
char g_img3[16][9] ={
    "        ",
    "        ",
    "   SS   ",
    "  SSSS  ",
    "  SSSS  ",
    "  SSSS  ",
    "   SS   ",
    " SSSSSS ",
    "SSSSSSSS",
    "SSSSSSSS",
    "SSSSSSSS",
    " S SS S ",
    "   SS   ",
    "   SS   ",
    "  SSSS  ",
    "        "
};
 
char g_img4[16][9] ={
    "        ",
    "        ",
    "        ",
    "   GG   ",
    "  GGGG  ",
    "  GGGG  ",
    " GGGGGG ",
    " GGGGGG ",
    "GGGGGGGG",
    "GGGGGGGG",
    "GGGGGGGG",
    "GGGGGGGG",
    " G GG G ",
    "   GG   ",
    "   GG   ",
    "        "
};
 
//-----------------------------------------------------------------------------
// パレットに色をセットする
//-----------------------------------------------------------------------------
void set_pal(int hImg)
{
    SetPaletteSoftImage( hImg, 0, BLACK, 0 ) ;
    SetPaletteSoftImage( hImg, 1, WHITE, 0 ) ;
    SetPaletteSoftImage( hImg, 2, YELLOW, 0 ) ;
    SetPaletteSoftImage( hImg, 3, CYAN, 0 ) ;
    SetPaletteSoftImage( hImg, 4, MAGENTA, 0 ) ;
    SetPaletteSoftImage( hImg, 5, GREEN, 0 ) ;
}
 
//-----------------------------------------------------------------------------
// ドット絵を描く
//-----------------------------------------------------------------------------
void make_dot(int hImg, char (*img)[9])
{
    int x, y, c;
 
    for( y=0; y<16 ; y++ ){
        for( x=0; x<8 ; x++ ){
            c=0;
            if(img[y][x]==' '){ c=0; }  // BLACK
            if(img[y][x]=='Y'){ c=2; }  // YELLOW
            if(img[y][x]=='S'){ c=3; }  // CYAN
            if(img[y][x]=='R'){ c=4; }  // MAGENTA
            if(img[y][x]=='G'){ c=5; }  // GREEN
 
            DrawPixelPalCodeSoftImage( hImg, x, y, c ) ;
        }
    }
}
 
//-----------------------------------------------------------------------------
// 右に得点表を表示する
//-----------------------------------------------------------------------------
void put_tokuten(int hGraph[])
{
    int White  = GetColor(WHITE);
    int Yellow = GetColor(YELLOW);
 
    DrawBox(43*8, 2*16, 53*8, 11*16, White, FALSE);
 
    DrawGraph(45*8, 3*16, hGraph[0], FALSE);        // ハートを表示
    DrawGraph(45*8, 5*16, hGraph[1], FALSE);        // ダイヤを表示
    DrawGraph(45*8, 7*16, hGraph[2], FALSE);        // クラブを表示
    DrawGraph(45*8, 9*16, hGraph[3], FALSE);        // スペードを表示
 
    DrawString(48*8, 3*16, " 10", Yellow);          // ハートの点数を表示
    DrawString(48*8, 5*16, " 20", Yellow);          // ダイヤの点数を表示
    DrawString(48*8, 7*16, "-10", Yellow);          // クラブの点数を表示
    DrawString(48*8, 9*16, "-20", Yellow);          // スペードの点数を表示
}
 
//-----------------------------------------------------------------------------
// 終わりの処理
//-----------------------------------------------------------------------------
int owari(int &HiScore, int score, int time1)
{
    int White  = GetColor(WHITE);
    int Black  = GetColor(BLACK);
    int Yellow = GetColor(YELLOW);
 
    DrawBox(0, 0, 38*8, 16, Black, TRUE);
    DrawFormatString(0, 0, White, " HiScore %d  score %d  time %d/%d", HiScore, score, time1/1000, TIME);
    DrawBox(6*16, 8*16, 16*16, 15*16, Black, TRUE);
    DrawBox(6*16, 8*16, 16*16, 15*16, Yellow, 0);
    DrawString(8*16,  9*16, "  TIME UP", Yellow);
    DrawString(8*16, 11*16, "HIT ANY KEY", White);
    DrawString(8*16, 13*16, "[ESC] 終了", White);
    ScreenFlip() ;
    Beep(1000,1000);
    WaitTimer(1000);
 
    if(WaitKey()==KEY_INPUT_ESCAPE){
        return 1;
    }
    if(HiScore < score){
        HiScore = score;
    }
    return 0;
}
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White = GetColor(WHITE);
    int Black = GetColor(BLACK);
    int score=0;                // スコア
    int HiScore=0;              // ハイスコア
    int a=20;                   // 自分のx座標
    int rol=0;                  // 障害物の配列番号
    int key;                    // キー押し下げ
    int hImg[4];                // パレット画像のハンドル
    int hGraph[4];              // グラフィックハンドル
    int StartTime, time1=0;     // 時間
    SMark mark[25];             // マークの構造体
 
    memset(mark, 0, sizeof(SMark)*25);  // 0で初期化
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ){ return -1; }
    ChangeFont( "MS ゴシック" ) ;
    SetFontSize( 16 ) ;
    SetFontThickness( 1 );              // 文字の太さを1ドットにする
    SetAlwaysRunFlag( TRUE ) ;          // バックグランドでも実行する
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    // 空のパレット画像を作成する
    hImg[0] = MakePAL8ColorSoftImage( 8, 16 ) ;
    hImg[1] = MakePAL8ColorSoftImage( 8, 16 ) ;
    hImg[2] = MakePAL8ColorSoftImage( 8, 16 ) ;
    hImg[3] = MakePAL8ColorSoftImage( 8, 16 ) ;
 
    // パレットに色をセットする
    set_pal(hImg[0]);
    set_pal(hImg[1]);
    set_pal(hImg[2]);
    set_pal(hImg[3]);
 
    //ドット絵を描く
    make_dot(hImg[0], g_img1);  // ハート
    make_dot(hImg[1], g_img2);  // ダイヤ
    make_dot(hImg[2], g_img3);  // クラブ
    make_dot(hImg[3], g_img4);  // スペード
 
    // グラフィックハンドルを作成
    hGraph[0] = CreateGraphFromSoftImage( hImg[0] ) ;
    hGraph[1] = CreateGraphFromSoftImage( hImg[1] ) ;
    hGraph[2] = CreateGraphFromSoftImage( hImg[2] ) ;
    hGraph[3] = CreateGraphFromSoftImage( hImg[3] ) ;
 
    // 使い終わったら解放
    DeleteSoftImage( hImg[0] ) ;
    DeleteSoftImage( hImg[1] ) ;
    DeleteSoftImage( hImg[2] ) ;
    DeleteSoftImage( hImg[3] ) ;
 
    StartTime = 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>36 ){ a=36; }         // 右端にきたら
       
        DrawString(a*8, 3*16, "|--|", White);
        put_tokuten(hGraph);        // 得点表を表示
       
        mark[rol].m = GetRand(3);   // 乱数でマークの種類を決める
        mark[rol].x = GetRand(37)+1;// 乱数でマークの表示位置(x座標)を決める
        mark[rol].y = 24;           // y座標は一番下から
       
        for(int i=0; i<25 ; i++){
            if((mark[i].x >= a+1) && (mark[i].x <= a+2) && (mark[i].y == 3)){   // 当たり判定
                if(mark[i].m==0){ score+=10; Beep(1000, 30);}                   // ハート
                if(mark[i].m==1){ score+=20; Beep(1500, 30);Beep(1000, 30);}    // ダイヤ
                if(mark[i].m==2){ score-=10; Beep( 500, 30);}                   // クラブ
                if(mark[i].m==3){ score-=20; Beep( 500, 30);Beep( 500, 30);}    // スペード
            }
            DrawGraph( mark[i].x*8, mark[i].y*16, hGraph[mark[i].m], FALSE ) ;  // 描画
            mark[i].y--;        // 表示後のy座標を1つ上にする。
        }
        rol++;
        if(rol>24){
            rol=0;              // マークの配列番号をセットしていくため
        }
        if(time1>TIME*1000){    // 60秒過ぎたら
            if(owari(HiScore, score, time1)){
                goto end;
            }
            memset(mark, 0, sizeof(SMark)*25);      // 0で初期化
            rol=0; score=0; StartTime=GetNowCount();
        }
        time1 = GetNowCount() - StartTime;          // 経過時間
 
        DrawBox(0, 0, 38*8, 16, Black, TRUE);
        DrawFormatString( 0, 0, White, " HiScore %d  score %d  time %d/%d", HiScore, score, time1/1000, TIME);
 
        ScreenFlip() ;
        WaitTimer(WAIT);        // ゲーム全体のウェイト
    }
end:
    for(int i=0; i<4 ; i++){
        DeleteGraph( hGraph[i] );   // グラフィックハンドルの削除
    }
    DxLib_End();                // DXライブラリの後始末
    return 0;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2018年1月11日(木) 18:11
No: 14
(OFFLINE)

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

どうも、ちまたで、ちまった、ぷるぷるプログラミングです。
今回で、ちまったのだ。いや~、面白かったねぇ。
何個ゲーム作ったか覚えてないけど。(笑)
BASIC面白かったよぉ。今度はHSPを勉強して移植しようかな。
では、ちまたで、ちまった、ゲームを堪能してください。

●目的●
カーソルキー(上、下、左、右)を使って、トンボを採るゲームです。

●内容●
発生するトンボ(T)を、網(○)で採った分だけ得点となります。
時間は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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//-----------------------------------------------------------------------------
//  2018-01-11(木)
//
//  トンボ採りゲーム
//
//-----------------------------------------------------------------------------
#include "DxLib.h"
 
#define WHITE       255,255,255     // 白(最大輝度白色光)    255
#define YELLOW      255,255,  0     // 明るい黄色              251
#define BLACK         0,  0,  0     // 黒                        0
 
#define WAIT        (150)           // 全体のウェイト
#define TIME        (60)            // 制限時間(60秒)
#define TOMBO       (17)            // トンボの数
#define SPEED       (2)             // トンボのスピード(大きくすると遅くなる)
 
//-----------------------------------------------------------------------------
// トンボの構造体
//-----------------------------------------------------------------------------
struct STombo {
    int x;
    int y;
};
 
//-----------------------------------------------------------------------------
// 得点を表示
//-----------------------------------------------------------------------------
void put_score(int HiScore, int score, int time1)
{
    int White  = GetColor(WHITE);
    int Black  = GetColor(BLACK);
 
    DrawBox(28*16, 2*16, 36*16, 7*16, Black, TRUE);
    DrawFormatString(28*16, 2*16, White, "HiScore %d", HiScore);
    DrawFormatString(28*16, 4*16, White, "Score   %d", score);
    DrawFormatString(28*16, 6*16, White, "Time %3d/%d", time1/1000, TIME);
}
 
//-----------------------------------------------------------------------------
// 終わりの処理
//-----------------------------------------------------------------------------
int owari(int& HiScore, int score, int time1)
{
    int White  = GetColor(WHITE);
    int Black  = GetColor(BLACK);
    int Yellow = GetColor(YELLOW);
 
    put_score(HiScore, score, time1);
   
    DrawBox(8*16, 8*16, 18*16, 15*16, Black, TRUE);
    DrawBox(8*16, 8*16, 18*16, 15*16, Yellow, 0);
    DrawString(11*16,    9*16, "TIME UP", Yellow);
    DrawString(10*16,   11*16, "HIT ANY KEY", White);
    DrawString(10*16+4, 13*16, "[ESC] 終了", White);
    ScreenFlip() ;
    Beep(1000,1000);
    WaitTimer(300);
 
    if(WaitKey()==KEY_INPUT_ESCAPE){
        return 1;
    }
    if(HiScore < score){
        HiScore = score;
    }
    return 0;
}
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    int White = GetColor(WHITE);
    int Yellow= GetColor(YELLOW);
    int score=0;            // スコア
    int HiScore=0;          // ハイスコア
    int x=12, y=12;         // 自分の位置
    int speed=0;            // トンボのスピードカウンタ
    int time1=0;            // 経過時間
    int StartTime;          // スタート時間
    int key;                // キー押し下げ
    STombo tombo[TOMBO];    // トンボの構造体
 
    ChangeWindowMode(TRUE);
    if( DxLib_Init() < 0 ){ return -1; }
    ChangeFont( "MS ゴシック" ) ;
    SetFontSize( 16 ) ;
    SetFontThickness( 6 );              // 文字の太さを2ドットにする
    SetAlwaysRunFlag( TRUE ) ;          // バックグランドでも実行する
    SetDrawScreen( DX_SCREEN_BACK ) ;
 
    for(int i=0; i<TOMBO ; i++){        
        tombo[i].x = GetRand(24)+1;
        tombo[i].y = GetRand(24)+1;
    }
    StartTime = GetNowCount();
   
    while(!ProcessMessage() && !ClearDrawScreen())
    {
        key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
 
        if( key & PAD_INPUT_9 )    { break; }   // ESCで終了
        if( key & PAD_INPUT_LEFT ) { x--;   }   // [←]キー
        if( key & PAD_INPUT_RIGHT ){ x++;   }   // [→]キー
        if( key & PAD_INPUT_UP )   { y--;   }   // [↑]キー
        if( key & PAD_INPUT_DOWN ) { y++;   }   // [↓]キー
 
        if( x<1 ) { x=1; }      // 左端にきたら
        if( x>25 ){ x=25;}      // 右端にきたら
        if( y<1 ) { y=1; }      // 上端にきたら
        if( y>25 ){ y=25;}      // 下端にきたら
       
        DrawBox(8, 8, 26*16+8, 26*16+8, White, FALSE);  // 枠を表示
        DrawString(x*16, y*16, "○", Yellow);          // 網を表示
 
        for(int i=0; i<TOMBO ; i++){        
            DrawString(tombo[i].x*16, tombo[i].y*16, "T", White); // トンボを表示
        }
        for(int i=0; i<TOMBO ; i++){        
            if((tombo[i].x==x) && (tombo[i].y==y)){     // 当たり判定
                put_score(HiScore, score, time1);
                ScreenFlip() ;
                score++;
                Beep(2000, 100);Beep(1000, 100);
                tombo[i].x = GetRand(24)+1;         // 新しくトンボを作る
                tombo[i].y = GetRand(24)+1;
            }
        }
        speed++;
        if(speed > SPEED){              // トンボのスピード調整
            speed=0;
            for(int i=0; i<TOMBO ; i++){        // トンボを動かす
                tombo[i].x += GetRand(2)-1;
                tombo[i].y += GetRand(2)-1;
                if( tombo[i].x<1 ) { tombo[i].x=1; }    // 左端にきたら
                if( tombo[i].x>25 ){ tombo[i].x=25;}    // 右端にきたら
                if( tombo[i].y<1 ) { tombo[i].y=1; }    // 上端にきたら
                if( tombo[i].y>25 ){ tombo[i].y=25;}    // 下端にきたら
            }
        }
        time1 = GetNowCount() - StartTime;      // 経過時間
 
        if(time1>TIME*1000){    // 60秒過ぎたら
            if(owari(HiScore, score, time1)){
                goto end;
            }
            x=12; y=12; score=0;
            StartTime = GetNowCount();
        }
        put_score(HiScore, score, time1);
        ScreenFlip() ;
        WaitTimer(WAIT);        // ゲーム全体のウェイト
    }
end:
    DxLib_End();        // DXライブラリの後始末
    return 0;
}

Name: どぶろく
[URL]
上級者(21,901 ポイント)
Date: 2018年1月16日(火) 19:18
No: 15
(OFFLINE)

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

あちゃ~、 DxLib_Init 呼び出す前に GetColor 使っちゃったよ。戻り値も int じゃなく unsigned int じゃん。
WaitTimer も使っちゃてるし、ScreenFlip も複数使ってる、よく見れば goto も使ってる。
こうやって失敗を重ねて成長して行くんだね。また一つ(5つも)賢くなったのだ、のだ、野田の玉川。


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

オンラインデータ

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