哈哈,刚做完的一个小程序源代码,大家看看,给点意见!
/*
Name: 贪吃蛇
Copyright:
Author: chjshen
Date: 20-08-2003 17:58
Description: 一个贪吃蛇的例程,完成了基本的功能,有很多的BUG,不要见笑呀
*/
#include <windows.h>
/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";
//定义一些常用的变量
HWND hwnd_food=NULL,hwnd_snake_jie[16],hwnd;
HINSTANCE hInstance;
int direction=6;//蛇的方向,6为左,8为上,2为下,4为右
int snake_length=3;
//定义蛇的节的结构
struct snake{
HWND hwnd_snake;
int current_x;
int current_y;
int next_x;
int next_y;
};
struct snake snake_jie[16],food;
//定义初始化函数、移动蛇节的函数、随机出现食物的函数、
//越界函数、是否吃到食物、吃食物函数
int init();
int move();
int move_jie();
int rand_food();
int is_out();
int is_eat_food();
int eat_food();
int restart();
//随机出现食物
int rand_food()
{
int x,y;
x=rand()%20;
x=x*20;
y=rand()%20;
y=y*20;
food.current_x=x;
food.current_y=y;
food.next_x =0;
food.next_y =0;
hwnd_food=CreateWindow ("button","",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
x,y, 20, 20,hwnd,(HMENU)snake_length,hInstance,NULL);
food.hwnd_snake=hwnd_food;
hwnd_snake_jie[snake_length]=hwnd_food;
snake_jie[snake_length].current_x=food.current_x;
snake_jie[snake_length].current_y=food.current_y;
snake_jie[snake_length].next_x=food.next_x;
snake_jie[snake_length].next_y=food.next_y;
return 0;
}
//初始化函数
int init()
{
int i,x=20,y=40;
direction=6;
for(i=0;i<3;i++)
{
hwnd_snake_jie[i]=CreateWindow("button","",
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
x+20*i,y,20,20,hwnd,(HMENU)i,hInstance,NULL);
snake_jie[i].hwnd_snake=hwnd_snake_jie[i];
snake_jie[i].current_x=x+20*i;
snake_jie[i].current_y=y;
snake_jie[i].next_x =x+20*(i+1);
snake_jie[i].next_y =y;
}
}
//移动蛇节的函数
int move()
{
switch(direction)
{
case 2:
snake_jie[snake_length-1].next_x=snake_jie[snake_length-1].current_x;
snake_jie[snake_length-1].next_y=snake_jie[snake_length-1].current_y+20;
move_jie();
break;
case 4:
snake_jie[snake_length-1].next_x=snake_jie[snake_length-1].current_x-20;
snake_jie[snake_length-1].next_y=snake_jie[snake_length-1].current_y;
move_jie();
break;
case 8:
snake_jie[snake_length-1].next_x=snake_jie[snake_length-1].current_x;
snake_jie[snake_length-1].next_y=snake_jie[snake_length-1].current_y-20;
move_jie();
break;
case 6:
snake_jie[snake_length-1].next_x=snake_jie[snake_length-1].current_x+20;
snake_jie[snake_length-1].next_y=snake_jie[snake_length-1].current_y;
move_jie();
break;
}
return 0;
}
//移动蛇节的中间函数
int move_jie()
{ int i;
for(i=snake_length-1;i>=0;i--)
{
SetWindowPos(hwnd_snake_jie[i],NULL,
snake_jie[i].next_x,
snake_jie[i].next_y,
0,0,SWP_NOSIZE);
snake_jie[i].current_x=snake_jie[i].next_x;
snake_jie[i].current_y=snake_jie[i].next_y;
}
for(i=0;i<snake_length-1;i++)
{
snake_jie[i].next_x=snake_jie[i+1].current_x;
snake_jie[i].next_y=snake_jie[i+1].current_y;
}
}
//越界函数
int is_out()
{
if(snake_jie[snake_length-1].current_x>400
||snake_jie[snake_length-1]. current_y>400
||snake_jie[snake_length-1].current_x<0
||snake_jie[snake_length-1].current_y<0)
{
KillTimer(hwnd,1);
return 1;
}
else
return 0;
}
//是否吃到食物函数
int is_eat_food()
{
if(snake_jie[snake_length-1].next_x==food.current_x
&&snake_jie[snake_length-1].next_y==food.current_y)
return 1;
else
return 0;
}
//吃食物函数
int eat_food()
{
if(snake_length<=15)
{
//nd_snake=hwnd_snake_jie[snake_length];
snake_length=snake_length+1;
snake_jie[snake_length].current_x=food.current_x;
snake_jie[snake_length].current_y=food.current_y;
snake_jie[snake_length].hwnd_snake=food.hwnd_snake;
snake_jie[snake_length].next_x =food.next_x;
snake_jie[snake_length].next_y =food.next_y;
snake_jie[snake_length-1].next_x =food.current_x;
snake_jie[snake_length-1].next_y =food.current_y;
rand_food();
return 1;
}
else
return 0;
}
//重新开始
int restart()
{
int i;
for(i=0;i<snake_length;i++)
{
DestroyWindow(hwnd_snake_jie[i]);
}
}
//////