网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月26日漏签0天
c++吧 关注:643,895贴子:2,117,145
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 13回复贴,共1页
<<返回c++吧
>0< 加载中...

【初学】遇到困难,求指导、小API程序。【第二季】。。

  • 只看楼主
  • 收藏

  • 回复
  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一楼。
弄一个贪吃蛇小小游戏。然后弄出来它不会自己走。。求指导、、也可以吃到东西。。就是需要按键盘或移动鼠标才会动。。昨天问了一个问题有好心人帮我解决了。再求、、
代码有点乱、请包涵。
C++真好玩、



  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<windows.h> //包含应用程序中所需的数据类型和数据结构的定义
#include <stdio.h>
#include <time.h>
class Snake
{
public:
int x[100];
int y[100];
int node;
int dircection;
int life ;
int state; //状态
};
class Food
{
public:
int x;
int y;
int yes;
};
int m=1;
int n=1;
int i,j;
int flag=1;
Snake snake;
Food food;
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明
//--------------- 以下初始化窗口类 ----------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[] = "chuangkou"; //窗口类名
char lpszTitle[]= "窗口"; //窗口标题名
//窗口类的定义
wndclass.style=0; //窗口类型为默认类型
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
//窗口的最小化图标为默认图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;
//窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
//窗口背景为白色
wndclass.lpszMenuName=NULL; //窗口中无菜单
wndclass.lpszClassName=lpszClassName ; //窗口类名为"窗口"
//--------------- 以下进行窗口类的注册 -------
if(!RegisterClass( &wndclass)) //如果注册失败则发出警告
{
MessageBeep(0); return FALSE;
}
//---------------- 创建窗口 -------------------
hwnd=CreateWindow
(
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角坐标为默认值
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的高和宽为默认值
NULL, //此窗口无父窗口
NULL, //此窗口无主菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL //不使用该值
);
//--------------- 显示窗口 ----------------------
ShowWindow( hwnd, nCmdShow) ;
//-------------- 绘制用户区 ---------------------
UpdateWindow(hwnd);
//----------------- 消 息 循 环 ----------------------
while( GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}
return Msg.wParam; //消息循环结束即程序终止时将信息返回系统



2025-11-26 03:09:36
广告
不感兴趣
开通SVIP免广告
  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
}
void DrawWall(HDC hDC);
void ShowStart(HDC hDC); //开始窗口
void ShowGame(HDC hDC);
void DrawSnake(HDC hDC,Snake snake);
void Show(HDC hDC); //显示窗口
void ShowCreditA(HDC hdc,Snake snake); //评分窗口
void DrawFood(HDC hDC,Food *food);
void GameStart(); //游戏开始
void SnakeMove(Snake *snake);
void AnyKeyA(Snake &snake); //按键输入
void CrashFood(Food *food,Snake *snake);
int SetFlag();
int A(int a);
clock_t startTime=clock();
//窗口函数
LRESULT CALLBACK WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
GetClientRect(hwnd,&rect);
if(clock()-startTime>100)
{
InvalidateRect(hwnd,&rect,true);
startTime=clock();
}
switch(message)
{
case WM_CREATE:
snake.x[0]=100;
snake.y[0]=70;
snake.x[1]=90;
snake.y[1]=70;
snake.dircection=4;
snake.life=1;
snake.node=2;
snake.state=1;
flag=1;
m=1;
n=1;
break;
case WM_PAINT:
hDC=BeginPaint(hwnd,&ps);
Show(hDC); //函数调用
GameStart();
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
default: //默认时采用系统消息默认处理函数
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
void DrawWall(HDC hDC)
{
for(int i=50;i<=700;i=i+10)
{
Rectangle(hDC,i,40,i+10,49);
Rectangle(hDC,i,481,i+10,490);
}
for(int j=40;j<=480;j=j+10)
{
Rectangle(hDC,50,j,59,j+10);
Rectangle(hDC,701,j,710,j+10);
}
}
void ShowStart(HDC hDC)
{
TextOut(hDC,330,200,"欢迎进入游戏!",strlen("欢迎进入游戏!"));
TextOut(hDC,330,300,"按1键开始游戏!",strlen("按1键开始游戏!"));
TextOut(hDC,350,460,"0键退出",strlen("0键退出"));
}
void DrawFood(HDC hDC,Food *food)
{
if(food->yes==0)
{
food->x=A(630)+60;
food->y=A(420)+50;
while (food->x%10!=0)
{
food->x++;
}
while(food->y%10!=0)
{
food->y++;
}
Rectangle (hDC,food->x,food->y,food->x+10,food->y+10);
food->yes=1;
}
else
food->yes=1;
Rectangle (hDC,food->x,food->y,food->x+10,food->y+10);
}
int A(int a)
{
#define MAX a
int t;
int timerand=clock();
srand((unsigned)time(NULL));
t=(rand()+timerand)%MAX;
return t;
}
int SetFlag()
{
static int flag=1;
if(flag==1&&GetAsyncKeyState('1')&0x8000f)
{
flag=2;
return flag;
}
if(flag==2&&0==snake.life)
{
flag=3;
return flag;
}
if(flag==1&&GetAsyncKeyState('0')&0x8000f)
{
flag=4;
return flag;



  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
}
if(flag!=1&&GetAsyncKeyState('C')&0x8000f)
{
flag=1;
return flag;
}
return flag;
}
void Show(HDC hDC)
{
switch(SetFlag())
{
case 1:
ShowStart (hDC);
break;
case 2:
ShowGame(hDC);
break;
}
}
void ShowGame(HDC hDC)
{
DrawSnake(hDC,snake);
ShowCreditA(hDC,snake);
DrawWall(hDC);
DrawFood(hDC,&food);
}
void DrawSnake(HDC hDC,Snake snake)
{
for(int i=0;i<=snake.node;i++)
{
Rectangle(hDC,snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);
}
}
void ShowCreditA(HDC hDC,Snake snake) //显示分数
{
char str [25];
itoa((snake.node -2)*10,str,10);
TextOut(hDC,300,20,"得分:",strlen("得分:"));
TextOut(hDC,350,20,str,strlen(str));
TextOut(hDC,370,20,"c键返回游戏主菜单",strlen("c键返回游戏主菜单"));
}
void GameStart()
{
if(2==SetFlag())
{
SnakeMove(&snake);
AnyKeyA(snake);
CrashFood(&food,&snake);
}
}
void SnakeMove(Snake *snake)
{
for(int ii=snake->node;ii>0;ii--)
{
snake->x[ii]=snake->x[ii-1];
snake->y[ii]=snake->y[ii-1];
}
if(snake->dircection==1)
snake->x[0]=snake->x[0]-10;
if(snake->dircection==2)
snake->y[0]=snake->y[0]-10;
if(snake->dircection==3)
snake->y[0]=snake->y[0]+10;
if(snake->dircection==4)
snake->x[0]=snake->x[0]+10;
}
void AnyKeyA(Snake &snake)
{
if(GetAsyncKeyState('A')&0x8000f&&snake.dircection!=4)
{
snake.dircection=1;
}
if(GetAsyncKeyState('W')&0x8000f&&snake.dircection!=3)
{
snake.dircection=2;
}
if(GetAsyncKeyState('S')&0x8000f&&snake.dircection!=2)
{
snake.dircection=3;
}
if(GetAsyncKeyState('D')&0x8000f&&snake.dircection!=1)
{
snake.dircection=4;
}
}
void CrashFood(Food *food,Snake *snake)
{
if(food->x==snake->x[0]&&food->y==snake->y[0])
{
snake->node=snake->node+1;
food->yes=0;
}
}
代码如上、、有点乱。。请包涵、、蛇死的代码还没有写进去。。


  • SergeiSobolev
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Level Set and the Snake Algorithm -
A Fast Algorithm for Active Contours and Curvature Estimation


  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有人么。。来人。。@lil174
有空的话。。看看。。谢谢。。


  • ⑨chu
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看gdi的我宁可看d3d


  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
弱弱问下。。这是什么意思。。函数。。还是、、


2025-11-26 03:03:36
广告
不感兴趣
开通SVIP免广告
  • SergeiSobolev
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这只是我目前感兴趣的课题而已


  • 无聊的菜虫
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你既然能让它移动只要不让它停就可以了,键盘和鼠标只下“转向”指令就行


  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是。。现在运行了以后。。需要一直按键盘他才会动。。。
我的理解是他需要消息输入才能动、无论什么消息、都行。
意味着我要一直不停地按某一个键。。游戏才能正常运行。。不信你试试。。


  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这又是什么。。


  • 德不孤先生
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额,没人理我啊…好吧…中午回去弄短来…


  • 无聊的菜虫
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你应该设定蛇是不停走动的


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 13回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示