64,654
社区成员
发帖
与我相关
我的任务
分享
#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;
}