#include<iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;
void clrscr()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home = { 0, 0 };
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);
FillConsoleOutputCharacter(hConsoleOut, ' ', csbiInfo.dwSize.X * csbiInfo.dwSize.Y, Home, &dummy);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y = 0;
SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}
//screen: goto [x,y]
void gotoXY(int column, int line)
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
struct ToaDo
{
int x, y;
};
struct HoaQua{
ToaDo td;
};
enum Trangthai{
UP,
DOWN,
LEFT,
RIGHT
};
struct Snake{
int n;
Trangthai tt;
ToaDo dot[31];
};
void KhoiTao(Snake &snake, HoaQua &hoaQua){
snake.n = 1;
snake.dot[0].x = 0;
snake.dot[0].y = 0;
snake.tt = RIGHT;
hoaQua.td.x = 10;
hoaQua.td.y = 10;
}
void HienThi(Snake &snake, HoaQua &hoaQua){
clrscr();
gotoXY(hoaQua.td.x, hoaQua.td.y);
cout << "A";
for (int i = 0; i < snake.n; i++){
gotoXY(snake.dot[i].x, snake.dot[i].y);
cout << "*";
}
}
void DieuKhien_DiChuyen(Snake &snake){
for (int i = snake.n - 1; i>0; i--){
snake.dot[i] = snake.dot[i - 1];
}
if (_kbhit()){
char key = _getch();
if (key == 'w' || key == 'W'){
snake.tt = UP;
}
else if (key == 'a' || key == 'A'){
snake.tt = LEFT;
}
else if (key == 's' || key == 'S'){
snake.tt = DOWN;
}
else if (key == 'd' || key == 'D'){
snake.tt = RIGHT;
}
}
if (snake.tt == UP){
snake.dot[0].y--;
}
else if (snake.tt == DOWN){
snake.dot[0].y++;
}
else if (snake.tt == LEFT){
snake.dot[0].x--;
}
else if (snake.tt == RIGHT){
snake.dot[0].x++;
}
}
void XuLy(Snake &snake, HoaQua &hoaQua){
if (snake.dot[0].x == hoaQua.td.x && snake.dot[0].y == hoaQua.td.y){
for (int i = snake.n; i > 0; i++){
snake.dot[i] = snake.dot[i - 1];
}
snake.n++;
}
}
int main(){
Snake snake;
HoaQua hoaQua;
KhoiTao(snake, hoaQua);
while (true)
{
HienThi(snake, hoaQua);
XuLy(snake, hoaQua);
DieuKhien_DiChuyen(snake);
Sleep(90);
}
}
#include<Windows.h>
#include<conio.h>
using namespace std;
void clrscr()
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home = { 0, 0 };
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut, &csbiInfo);
FillConsoleOutputCharacter(hConsoleOut, ' ', csbiInfo.dwSize.X * csbiInfo.dwSize.Y, Home, &dummy);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y = 0;
SetConsoleCursorPosition(hConsoleOut, csbiInfo.dwCursorPosition);
}
//screen: goto [x,y]
void gotoXY(int column, int line)
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
struct ToaDo
{
int x, y;
};
struct HoaQua{
ToaDo td;
};
enum Trangthai{
UP,
DOWN,
LEFT,
RIGHT
};
struct Snake{
int n;
Trangthai tt;
ToaDo dot[31];
};
void KhoiTao(Snake &snake, HoaQua &hoaQua){
snake.n = 1;
snake.dot[0].x = 0;
snake.dot[0].y = 0;
snake.tt = RIGHT;
hoaQua.td.x = 10;
hoaQua.td.y = 10;
}
void HienThi(Snake &snake, HoaQua &hoaQua){
clrscr();
gotoXY(hoaQua.td.x, hoaQua.td.y);
cout << "A";
for (int i = 0; i < snake.n; i++){
gotoXY(snake.dot[i].x, snake.dot[i].y);
cout << "*";
}
}
void DieuKhien_DiChuyen(Snake &snake){
for (int i = snake.n - 1; i>0; i--){
snake.dot[i] = snake.dot[i - 1];
}
if (_kbhit()){
char key = _getch();
if (key == 'w' || key == 'W'){
snake.tt = UP;
}
else if (key == 'a' || key == 'A'){
snake.tt = LEFT;
}
else if (key == 's' || key == 'S'){
snake.tt = DOWN;
}
else if (key == 'd' || key == 'D'){
snake.tt = RIGHT;
}
}
if (snake.tt == UP){
snake.dot[0].y--;
}
else if (snake.tt == DOWN){
snake.dot[0].y++;
}
else if (snake.tt == LEFT){
snake.dot[0].x--;
}
else if (snake.tt == RIGHT){
snake.dot[0].x++;
}
}
void XuLy(Snake &snake, HoaQua &hoaQua){
if (snake.dot[0].x == hoaQua.td.x && snake.dot[0].y == hoaQua.td.y){
for (int i = snake.n; i > 0; i++){
snake.dot[i] = snake.dot[i - 1];
}
snake.n++;
}
}
int main(){
Snake snake;
HoaQua hoaQua;
KhoiTao(snake, hoaQua);
while (true)
{
HienThi(snake, hoaQua);
XuLy(snake, hoaQua);
DieuKhien_DiChuyen(snake);
Sleep(90);
}
}