c语言打印搞笑图形,[原创]扫雷英雄--搞笑版

不好意思的确是没有,看来我上传错了

#include

#define COUNT 160 /* 雷的数量 */

#define ESC 15131 /* 退出 */

#define REST 4722 /* 重新开始 */

typedef struct

{

char sit_x; /* 扫雷位置 */

char sit_y;

char type; /* 是否已经扫除 */

char mark; /* 是否已经记录 */

char num; /* 0 - 9, 0 表示没有,9表示雷,1-8表示雷个数 */

} MINE;

MINE Mine[24][32]; /* 开辟雷区,768个方快 */

int count_ok; /* 记录扫出的雷 */

int count_will_ok; /* 记录标记的雷 */

int sound_key; /* 标记可以发声 */

char count_mine; /* 用于记录某个方快周围有几个雷 */

SAMPLE *sample;

void init_mine(void); /* 雷区初始化 */

void add_mine(int x, int y); /* 累计某个方快周围有几个雷 */

int play_mine(void); /* 开始扫雷 */

int open_mine(int x, int y); /* 显示原有图片 */

int open_mine2(int x, int y);

void over_mine(char key); /* 结束画面 */

void open_null(int x, int y); /* 翻出连接块 */

void sound(int key); /* 音效果 */

void add_mine(int x, int y)

{

if ((x > - 1) && (x < 32) && (y > -1) && (y < 24))

{

if (Mine[y][x].num == 9)

{

count_mine++;

}

}

}

void init_mine(void)

{

int i, j;

char x, y;

count_ok = 0;

/* 对雷区归零 */

for (y = 0; y < 24; y++)

{

for (x = 0; x < 32; x++)

{

Mine[y][x].type = 0;

Mine[y][x].mark = 0;

Mine[y][x].num = 0;

}

}

/* 随机给出160个雷 */

for (i = 0; i < COUNT; i++)

{

x = random(31);

y = random(23);

if (Mine[y][x].num == 9)

{

i--;

}

else

{

Mine[y][x].num = 9;

}

}

/* 初始化各方快的数字 */

for (y = 0; y < 24; y++)

{

for (x = 0; x < 32; x++)

{

if (Mine[y][x].num != 9) /* 若不为雷块 */

{

count_mine = 0;

add_mine(x - 1, y - 1);

add_mine(x, y - 1);

add_mine(x + 1, y - 1);

add_mine(x - 1, y);

add_mine(x + 1, y);

add_mine(x - 1, y + 1);

add_mine(x, y + 1);

add_mine(x + 1, y + 1);

Mine[y][x].num = count_mine;

}

}

}

scare_mouse();

/* 显示图片 */

for (y = 0; y < 24; y++)

{

for (x = 0; x < 32; x++)

{

/*if (Mine[y][x].num < 9)

{

show_bmp("bai.bmp", x * 20, y * 20);

if (Mine[y][x].num != 0)

{

set_str_color(Mine[y][x].num * 8765);

neo_printf(x * 20 + 5, y * 20 + 5, "%d", Mine[y][x].num);

}

}

else

{

show_bmp("bian.bmp", x * 20, y * 20);

}*/

show_bmp("gai.bmp", x * 20, y * 20);

}

}

unscare_mouse();

}

void sound(int key)

{

char name[20];

switch(key)

{

case 0:

sample = load_wav("agsy.wav"); /*读入一个音频采样*/

break;

case 9:

sample = load_wav("cdb.wav");

break;

case 10:

sample = load_wav("1ts.wav");

break;

default:

sprintf(name, "%d.wav", key);

sample = load_wav(name);

}

play_sample(sample, 255, 128, 0, 0);

sound_key = 0;

}

int open_mine(int x, int y)

{

if ((x < 0) || (x > 31) || (y < 0) || (y > 23))

{

return 0;

}

if (Mine[y][x].type == 0) /* 还未扫除 */

{

scare_mouse();

if (Mine[y][x].num == 9) /* 踩雷 */

{

Mine[y][x].type = 1; /* 表示翻出 */

if (sound_key)

{

sound(9);

}

show_bmp("bian.bmp", x * 20, y * 20);

unscare_mouse();

return 1;

}

else /* 没踩雷 */

{

if (Mine[y][x].num == 0) /* 空数字 */

{

if (sound_key)

{

sound(0);

}

open_null(x, y); /* 翻出连空块 */

unscare_mouse();

}

else /* 有数字 */

{

Mine[y][x].type = 1; /* 表示翻出 */

if (sound_key)

{

sound(Mine[y][x].num);

}

show_bmp("bai.bmp", x * 20, y * 20);

set_str_color(Mine[y][x].num * 8765);

neo_printf(x * 20 + 5, y * 20 + 5, "%d", Mine[y][x].num);

unscare_mouse();

}

return 0;

}

}

}

/* 种子填充法 */

void open_null(int x, int y)

{

if (Mine[y][x].type) /* 若已经翻出即退出 */

{

return;

}

if ((x < 0) || (x > 31) || (y < 0) || (y > 23))

{

return;

}

Mine[y][x].type = 1; /* 表示翻出 */

if (Mine[y][x].num == 0)

{

show_bmp("bai.bmp", x * 20, y * 20);

open_null(x, y - 1);

open_null(x, y + 1);

open_null(x - 1, y);

open_null(x + 1, y);

}

else

{

show_bmp("bai.bmp", x * 20, y * 20);

set_str_color(Mine[y][x].num * 8765);

neo_printf(x * 20 + 5, y * 20 + 5, "%d", Mine[y][x].num);

}

}

int play_mine(void)

{

int x, y;

int i, j;

int open_key[8];

char key, key1;

if (key = get_click())

{

sound_key = 1;

x = get_mouse_x() / 20;

y = get_mouse_y() / 20;

switch(key)

{

case 1: /* 鼠标左键操作 */

if (open_mine(x, y))

{

scare_mouse();

show_bmp("bian2.bmp", x * 20, y * 20);

unscare_mouse();

over_mine(0);

return 1;

}

else

{

return 0;

}

break;

case 2: /* 鼠标右键操作 */

if (Mine[y][x].type == 0 && count_will_ok < COUNT) /* 没翻出 */

{

scare_mouse();

while(get_click());

if (Mine[y][x].mark == 0) /* 没记录 */

{

show_bmp("gai2.bmp", x * 20, y * 20);

Mine[y][x].mark = 1; /* 记录标记下 */

sound(10);

count_will_ok++; /* 记录已标记好的个数 */

if (Mine[y][x].num == 9)/* 若是一个雷 */

{

count_ok++;

if (count_ok == COUNT) /* 判断是否成功 */

{

over_mine(1);

unscare_mouse();

return 1;

}

else

{

unscare_mouse();

return 0;

}

}

unscare_mouse();

}

else /* 已记录 */

{

show_bmp("gai.bmp", x * 20, y * 20);

Mine[y][x].mark = 0; /* 记录没标记 */

count_will_ok--; /* 记录已标记好的个数 */

unscare_mouse();

return 0;

}

}

break;

case 3: /* 鼠标左右键操作 */

if (Mine[y][x].type && Mine[y][x].num > 0) /* 为翻出的 */

{

open_key[0] = open_mine2(x - 1, y -1);

open_key[1] = open_mine2(x, y - 1);

open_key[2] = open_mine2(x + 1, y - 1);

open_key[3] = open_mine2(x - 1, y);

open_key[4] = open_mine2(x + 1, y);

open_key[5] = open_mine2(x - 1, y + 1);

open_key[6] = open_mine2(x, y + 1);

open_key[7] = open_mine2(x + 1, y + 1);

for (i = 0; i < 8; i++)

{

if (open_key[i]) /* 踩地雷 */

{

over_mine(1);

while (get_click()) ;

return 1;

}

}

return 0;

}

break;

}

while (get_click()) ;

}

return 0;

}

int open_mine2(int x, int y)

{

if (Mine[y][x].mark == 0) /* 未标记 */

{

if (open_mine(x, y) && Mine[y][x].num == 9)

{

scare_mouse();

show_bmp("bian2.bmp", x * 20, y * 20);

unscare_mouse();

return 1;

}

return 0;

}

}

/* 全部翻出 */

void over_mine(char key)

{

int x, y;

for (y = 0; y < 24; y ++)

{

for (x = 0; x < 32; x++)

{

if ((Mine[y][x].type == 0 && Mine[y][x].num != 9)

|| (Mine[y][x].mark == 0 && Mine[y][x].num == 9) )

{

open_mine(x, y);

}

}

}

}

void main(void)

{

int x, y;

char key = 0;

SAMPLE *sample = NULL;

neo_init();

set_window_mode(0);

set_vbe_mode(VBE640X480X64K);

install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL);

install_keyboard();

install_mouse();

show_mouse();

/* 初始化雷区 */

init_mine();

while(1)

{

if (keypressed())

{

switch(readkey())

{

case ESC:

return;

break;

case REST:

key = 0;

init_mine();

break;

}

}

if (key == 0)

{

if (play_mine())

{

key = 1;

}

}

}

destroy_sample(sample);

}

END_OF_MAIN();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值