Код:
//Подключаем модули
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#pragma warning (disable: 4996)
//Задаем константы для игрового поля
#define width 65
#define height 25
//Логика шарика
char vec, vec1;
//Создаём структуру ракетки
typedef struct {
int x, y; //Положение ракетки
int w; //Ширина ракетки
} TRacket;
//Создаём структуру шарика
typedef struct {
int x, y;
} TBall;
//Создаём массив который будет хранить игровое поле
char mas[height][width + 1];
//Помещение ракетки на экран
TRacket racket;
TBall ball;
void initRacket()
{
racket.w = 7; //Ставим ракетку в центр
racket.x = (width - racket.w) / 2;
racket.y = height - 1; //Ставим ракетку в центр
}
void PutRacket()
{
for (int i = racket.x; i < racket.x + racket.w; i++)
mas[racket.y][i] = '@';
}
void putBall()
{
mas[ball.y][ball.x] = '3';
}
void moveBall(int x, int y)
{
ball.x = x;
ball.y = y;
}
void initBall()
{
ball.x = 2;
ball.y = 2;
}
//1.Создаём функцию для заполнения игрового поля решетками
void init() //1.1.Ширина
{
for (int i = 0; i < width; i++)
mas[0][i] = '#';
mas[0][width] = '\0';
//Оставляем решётки только слева, справа, вверху, внизу на игровом поле
strncpy(mas[1], mas[0], width + 1);
for (int i = 1; i < width - 1; i++)
mas[1][i] = ' ';
for (int i = 2; i < height; i++) //1.2Длинна
strncpy(mas[i], mas[1], width + 1);
}
//Вывод на экран массива (игрового поля)
void show()
{
for (int i = 0; i < height; i++)
{
printf("%s", mas[i]);
if (i < height - 1)
printf("\n");
}
}
//Чтобы ракетка не выходила за решётки
void moveRacket(int x)
{
racket.x = x;
if (racket.x < 1)
racket.x = 1;
if (racket.x + racket.w >= width)
racket.x = width - 1 - racket.w;
}
//Убираем мигание
void setcur(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
//Движение шарика
void LogicBall()
{
if (ball.x - 1 == 0) vec = 'l';
if (ball.x + 1 == width) vec = 'r';
//================================
if (ball.y - 1 == 0) vec1 = 't';
if (ball.y + 1 == racket.y)
{
for (int i = racket.x; i < racket.x + racket.w; i++)
{
if (ball.x == i) vec1 = 'd';
}
}
//================================
if (vec1 == 't')
{
if (vec == 'r')
{
ball.x--;
ball.y++;
}
if (vec == 'l')
{
ball.x++;
ball.y++;
}
}
else if (vec1 == 'd')
{
if (vec == 'r')
{
ball.x--;
ball.y--;
}
if (vec == 'l')
{
ball.x++;
ball.y--;
}
}
}
int main()
{
//Вывод счётчика ширины и высоты на экран, а также ракетки
char c;
initRacket();
initBall();
moveBall(racket.x + racket.w / 2, racket.y - 1);
do
{
setcur(0, 0);
init();
PutRacket();
putBall();
show();
//Движение ракетки
if (GetKeyState('A') < 0) moveRacket(racket.x - 1);
if (GetKeyState('D') < 0) moveRacket(racket.x + 1);
LogicBall();
Sleep(10);
} while (GetKeyState(VK_ESCAPE) >= 0);
return 0;
}
Почему мячик не двигается отталкиваясь об ракетку? В движении шарика указал его поведение. Не работает, помогите...Спасибо