| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5322 人关注过本帖
标题:[原创]扫雷英雄--搞笑版
取消只看楼主 加入收藏
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[原创]扫雷英雄--搞笑版

界面

t0B9ALrz.rar (698.69 KB) [原创]扫雷英雄--搞笑版




ysLLqXMd.jpg (136.47 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 搞笑 英雄 扫雷 
2006-07-31 21:52
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
你点击下载,里面有源码的啊

个人网站 -  http://.h001.
2006-08-07 23:52
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 

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

#include <neo.h>

#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();


个人网站 -  http://.h001.
2006-08-08 16:24
快速回复:[原创]扫雷英雄--搞笑版
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013671 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved