一个使用_beginthreadex函数,字符上下左右移动的程序,运行不出来求解

BlueSuperMan 2015-05-09 09:36:47

#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <process.h>
using namespace std;




void gotoxy(int x, int y)
{
HANDLE hou= GetStdHandle(STD_OUTPUT_HANDLE);

COORD coord;

coord.X = x; coord.Y = y;

SetConsoleCursorPosition(hou, coord);

}

typedef struct
{
int leftblank ,upblank, width, height;
}Box;
Box box;

void drawBox()
{
box.upblank =5;
box.leftblank = 15;
box.width = 50;
box.height = 15;

int x,y;

for ( x =box.leftblank; x < box.leftblank + box.width; x++)
for ( y =box.upblank; y <box.height+box.upblank; y++)
{
gotoxy(x,y);
char c=' ';
printf("%c",c);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),56|128);
}

}

typedef struct{
int xpos,ypos;
int xmov,ymov;
}SNACK;

SNACK s;

char stop= false;

unsigned int __stdcall sMove(PVOID pM)
{
while(!stop)
{
gotoxy(box.leftblank+s.xpos,box.upblank+s.ypos);
char c=' ';
printf("%c",c);

s.xpos=s.xpos+s.xmov;
s.ypos=s.ypos+s.ymov;

if(s.xpos>box.width+box.leftblank-1)
s.xpos=s.xpos-box.width;
if(s.xpos<0)
s.xpos=s.xpos+box.width;
if(s.ypos>box.height+box.upblank-1)
s.ypos=s.ypos-box.height;
if(s.ypos<0)
s.ypos=s.ypos+box.height;

gotoxy(box.leftblank+s.xpos,box.upblank+s.ypos);
char ch='#';
printf("%c",ch);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),5|8|56|128);

Sleep(100);
}
return 0;
}

unsigned int __stdcall sControl(PVOID pM)
{
int code;
while(!stop)
{
code=getch();
if(code==27)
stop=true;
if(code==0)
{
code=getch();
switch(code)
{
case 32:
s.xmov=0;
s.ymov=0;
break;
case 72://up
s.xmov=0;
s.ymov=-1;
break;
case 75://left
s.xmov=-1;
s.ymov=0;
break;
case 77://right
s.xmov=1;
s.ymov=0;
break;
case 80://down
s.xmov=0;
s.ymov=1;
break;
}
}
}
return 0;
}

int main()
{
printf("Direction = [UP : DOWN : LEFT : RIGHT] ; STOP = [SPACE_BAR]");

drawBox();

s.xpos=25;
s.ypos=7;
s.xmov=0;
s.ymov=0;

const int THREAD_NUM = 2;
HANDLE handle[THREAD_NUM];

handle[0] = (HANDLE)_beginthreadex(NULL,0,sMove,NULL,0,NULL);
handle[1] = (HANDLE)_beginthreadex(NULL,0,sControl,NULL,0,NULL);
WaitForMultipleObjects(THREAD_NUM,handle,TRUE,INFINITE);
return 0;
}

...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovecjj19910205 2015-05-12
  • 打赏
  • 举报
回复
97行,为什么要判断==0?如果按up的话,肯定不执行switch,当然也不会移动了
BlueSuperMan 2015-05-11
  • 打赏
  • 举报
回复
能不能把我的代码调试一下通过!
707wk 2015-05-10
  • 打赏
  • 举报
回复
参考代码: https://github.com/707wk/Senior-middle-school/tree/master/temp/snake
BlueSuperMan 2015-05-10
  • 打赏
  • 举报
回复
才开始学习,会的同志们过来看看哈
BlueSuperMan 2015-05-10
  • 打赏
  • 举报
回复
才开始学习,会的同志们过来看看哈

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧