hasa1996n Ответов: 2

Игра пинг-понг Помогите помогите помогите ?


не могли бы вы помочь мне исправить код, потому что он не работает !!

Что я уже пробовал:

#include <graphics.h>


#define RACKETLEN 50
#define RACKETWIDTH 5

static int racket1_x = 20;
static int racket1_y = 280;
static int racket2_x = 770-RACKETWIDTH;
static int racket2_y = 280;
static int ball_x= 100, ball_y = 45;
static int ballSize = 10;
static int RacketColor = 15;
static int BallGNDColor = 0;
static int BallColor = 15;
int dirY = 0;int dirX = 0;

void drawBoard(int color)
{
	setcolor(color);
	rectangle (10,30, 780, 580);
}

void DrawLine(int color, int x0, int y0, int x1, int y1,int thickness) {

  while(thickness>=1)
  {
      int tx0,ty0,tx1,ty1;
      tx0=x0;tx1=x1;ty0=y0;ty1=y1;
      int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
      int dy = abs(y1-y0), sy = y0<y1 ? 1 : -1;
      int err = (dx>dy ? dx : -dy)/2, e2;

      for(;;){
        putpixel(x0, y0, color);
        //put_pixel(g,x0,y0);
        if (x0==x1 && y0==y1) break;
        e2 = err;
        if (e2 >-dx) { err -= dy; x0 += sx; }
        if (e2 < dy) { err += dx; y0 += sy; }
      }
      x0=tx0+1;
      y0=ty0;
      x1=tx1+1;
      y1=ty1;
      thickness--;
  }
}

void drawRackets(int color)
{
	DrawLine(color,racket1_x,racket1_y,racket1_x,racket1_y+RACKETLEN,RACKETWIDTH);
	DrawLine(color,racket2_x,racket2_y,racket2_x,racket2_y+RACKETLEN,RACKETWIDTH);
}

void drawBall(int x, int y, int ballSize, int color)
{
    DrawLine(color,x,y,x,y+ballSize,ballSize);

}

void drawTop()
{
    setcolor(4);
    outtextxy(30, 5, "Pong Game !");
    outtextxy(380, 5, "0 - 0");
    outtextxy(680, 5, "SCORE: ");
}

void initGame()
{
    initwindow(800, 600);
	cleardevice();
	drawBoard(1);
	drawRackets(RacketColor);
	drawTop();
}

void move_racket(int *x, int *y, int dir)
{
    drawRackets(0);
	if (dir == 1)  	/* LEFT */
		*y = *y - 5;
	else		/* RIGHT */
		*y = *y + 5;
	drawRackets(RacketColor);
}

void move_ball()
{
    if(ball_y>=580-ballSize){
        dirY = 0;}
    if(ball_y<=31){
        dirY = 1;}

  if(ball_x>=780-ballSize)
    {
    dirX=0;}
  if (ball_x<=31){
    dirX =1;}

	drawBall(ball_x,ball_y,ballSize,BallGNDColor);

    if(dirY == 1){
        ball_y++;}
    else{
        ball_y--;}

    if(dirX == 1){
        ball_x++;}
    else{
        ball_x--;}


	drawBall(ball_x,ball_y,ballSize,BallColor);
}



void playGame()
{
    char c;
    initGame();
    while(1) {
        if (kbhit()) {
            c = getch();
	    if (c == 'w')    /* 'a' character */
	    	move_racket(&racket1_x,&racket1_y,1);
        if (c == 's')
            move_racket(&racket1_x,&racket1_y,0);
	    if (c == 119)   /* 'w' character */
	    	move_racket(&racket2_x,&racket2_y,0);
	    // setpos(15,15);
	    // putint(c);
        }
       delay(1);
       if (ball_x < 800 && ball_y < 600) {
		move_ball();
       }
        // char* line;
        //line = readline();
        //println("");
        //println("You entered:");
        //println(line);
        //free(line);
    }
}


main(int argc, char *argv[])
{
    playGame();
    //while(1);
	//while(!kbhit()) delay(1);				// pause screen
}

2 Ответов

Рейтинг:
0

OriginalGriff

Цитата:
не могли бы вы помочь мне исправить код, потому что он не работает !!

Нет, не можем.
Мы не знаем, что он должен делать, мы не знаем, что он делает!
Мы здесь не для того, чтобы исправить вашу домашнюю работу - мы здесь, чтобы помочь вам решить ваши проблемы. И "заставить его работать" - это часть поставленной перед вами задачи, поэтому вы должны отладить его самостоятельно.

К счастью, обычно вы получаете множество инструментов, которые помогают вам сделать это, в совокупности называемых "отладчиком". Начните с рассмотрения того, что происходит, и выясните, что на самом деле означает "это не работает": что он делает, чего вы не ожидали, или не делает, что вы сделали? Когда он это делает? Что вы делаете, чтобы заставить его сделать это?
Затем начните смотреть на свой код и используйте отладчик, чтобы вставить точку останова где - то разумно-точно, где будет зависеть от вопросов "что", "когда" и "что" выше.
Затем запустите свой код в отладчике. когда он достигнет точки останова, он остановится и позволит вам взять управление на себя. Оттуда вы можете смотреть на переменные, запускать свой код по одной строке за раз и тому подобные очень полезные вещи (как именно вы это сделаете, будет зависеть от среды разработки, но поиск в Google "отладчика" и вашей компиляторной системы должен дать вам массу информации).

Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

Patrice T

Цитата:
не могли бы вы помочь мне исправить код, потому что он не работает !!

Это не информативно.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

Совет: возьмите лист бумаги и попробуйте сделать это вручную, ваша программа должна использовать ту же процедуру.