鱼C论坛

 找回密码
 立即注册
查看: 1858|回复: 8

[已解决]两个 o 遇到边界跳反,一开始都挺正常 到两个o 坐标相同时就不对了。。。

[复制链接]
发表于 2019-10-19 11:24:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码在下面
  1. #include<stdio.h>
  2. #include<windows.h>
  3. int width = 70;
  4. int hight = 22;
  5. int main()
  6. {
  7.         int x, y, x1, y1;
  8.         int xSpeed = 1, ySpeed = 1, x1Speed=1, y1Speed=1;
  9.         void gotoxy(int x, int y);
  10.         void printfBall(int a, int b);
  11.         void drawString(char ch, int n);
  12.         void drawInterFace();
  13.         void drawBall(int x, int y);
  14.         void clearBall(int x, int y);
  15.         void Ballgame(int *x, int *y, int xSpeed, int ySpeed);
  16.         void Deriction(int x, int y, int *xSpeed, int *ySpeed);
  17.         x = 1;
  18.         y = 1;
  19.         x1 = 68;
  20.         y1 = 1;
  21.         drawInterFace();
  22.         while (1)
  23.         {
  24.                 drawBall(x, y);
  25.                 Sleep(200);
  26.                 clearBall(x, y);
  27.                 Ballgame(&x, &y, xSpeed, ySpeed);
  28.                 Deriction(x, y, &xSpeed, &ySpeed);
  29.                 drawBall(x1, y1);
  30.                 Sleep(200);
  31.                 clearBall(x1, y1);
  32.                 Ballgame(&x1, &y1, x1Speed, y1Speed);
  33.                 Deriction(x1, y1, &x1Speed, &y1Speed);
  34.         }
  35.         system("pause");
  36.         return 0;
  37. }
  38. void gotoxy(int x, int y)
  39. {
  40.         COORD scrn;
  41.         HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  42.         scrn.X = x; scrn.Y = y;
  43.         SetConsoleCursorPosition(hOuput, scrn);
  44. }
  45. void drawString(char ch, int n)
  46. {
  47.         int i = 0;
  48.         for (i = 0; i < n; i++)
  49.         {
  50.                 printf("%c", ch);
  51.         }
  52. }
  53. void drawInterFace()
  54. {
  55.         int i;
  56.         drawString('*', width);
  57.         printf("\n");
  58.         for (i = 0; i < hight - 2; i++)
  59.         {
  60.                 drawString('*', 1);
  61.                 drawString(' ', 68);
  62.                 drawString('*', 1);
  63.                 printf("\n");
  64.         }
  65.         drawString('*', 70);
  66. }
  67. void Ballgame(int* x, int* y, int xSpeed, int ySpeed)
  68. {
  69.         *x += xSpeed;
  70.         *y += ySpeed;
  71.         if (*x > width - 2)
  72.         {
  73.                 *x = width - 2;
  74.         }
  75.         if (*y > hight - 2)
  76.         {
  77.                 *y = hight - 2;
  78.         }
  79.         if (*x < 1)
  80.         {
  81.                 *x = 1;
  82.         }
  83.         if (*y < 1)
  84.         {
  85.                 *y = 1;
  86.         }
  87. }
  88. void drawBall(int x, int y)
  89. {
  90.         gotoxy(x, y); printf("O\n");
  91. }
  92. void clearBall(int x, int y)
  93. {
  94.         gotoxy(x, y); printf(" \n");
  95. }
  96. void Deriction(int x, int y, int *xSpeed, int *ySpeed)
  97. {
  98.         if (x >= width - 2)
  99.                 *xSpeed = -*xSpeed;
  100.         if (y >= hight - 2)
  101.                 *ySpeed = -*ySpeed;
  102. }
复制代码

然后vs调试有没有直接跳到x=x1的功能啊  一次一次的按太麻烦了
最佳答案
2019-10-20 00:46:18
最后一个函数有问题
  1. void Deriction(int x, int y, int *xSpeed, int *ySpeed)   //**判断0的运动方向
  2. {
  3.     if (x <=1 || x >= width - 2)
  4.         *xSpeed = -*xSpeed;
  5.     if (y <=1 || y >= hight - 2)
  6.         *ySpeed = -*ySpeed;
  7. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-19 11:26:17 | 显示全部楼层
题目来自 《hello C语言》
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 11:48:34 | 显示全部楼层
木有一个人理我
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 11:51:05 | 显示全部楼层

超过40行代码请添加注释
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 12:01:26 | 显示全部楼层
bin554385863 发表于 2019-10-19 11:51
超过40行代码请添加注释

额      马上加上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 12:08:42 | 显示全部楼层
em。。。  怎么准确的加注释我不太明白  大概就这样?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-19 12:09:21 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<windows.h>
  3. int width = 70;
  4. int hight = 22;
  5. int main()
  6. {
  7.         int x, y, x1, y1;
  8.         int xSpeed = 1, ySpeed = 1, x1Speed=1, y1Speed=1;
  9.         void gotoxy(int x, int y);   //**按坐标打印
  10.         void printfBall(int a, int b);
  11.         void drawString(char ch, int n);   //**打印字符及个数
  12.         void drawInterFace();   //**打印边界
  13.         void drawBall(int x, int y);   //**通过坐标打印 O
  14.         void clearBall(int x, int y);  //**消除 0
  15.         void Ballgame(int *x, int *y, int xSpeed, int ySpeed);     //**使 0 运动
  16.         void Deriction(int x, int y, int *xSpeed, int *ySpeed);    //**判断0的运动方向
  17.         x = 1;
  18.         y = 1;
  19.         x1 = 68;
  20.         y1 = 1;
  21.         drawInterFace();
  22.         while (1)
  23.         {
  24.                 drawBall(x, y);
  25.                 Sleep(200);
  26.                 clearBall(x, y);
  27.                 Ballgame(&x, &y, xSpeed, ySpeed);
  28.                 Deriction(x, y, &xSpeed, &ySpeed);
  29.                 drawBall(x1, y1);
  30.                 Sleep(200);
  31.                 clearBall(x1, y1);
  32.                 Ballgame(&x1, &y1, x1Speed, y1Speed);
  33.                 Deriction(x1, y1, &x1Speed, &y1Speed);
  34.         }
  35.         system("pause");
  36.         return 0;
  37. }
  38. void gotoxy(int x, int y)
  39. {
  40.         COORD scrn;
  41.         HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
  42.         scrn.X = x; scrn.Y = y;
  43.         SetConsoleCursorPosition(hOuput, scrn);
  44. }
  45. void drawString(char ch, int n)
  46. {
  47.         int i = 0;
  48.         for (i = 0; i < n; i++)
  49.         {
  50.                 printf("%c", ch);
  51.         }
  52. }
  53. void drawInterFace()
  54. {
  55.         int i;
  56.         drawString('*', width);
  57.         printf("\n");
  58.         for (i = 0; i < hight - 2; i++)
  59.         {
  60.                 drawString('*', 1);
  61.                 drawString(' ', 68);
  62.                 drawString('*', 1);
  63.                 printf("\n");
  64.         }
  65.         drawString('*', 70);
  66. }
  67. void Ballgame(int* x, int* y, int xSpeed, int ySpeed)
  68. {
  69.         *x += xSpeed;
  70.         *y += ySpeed;
  71.         if (*x > width - 2)
  72.         {
  73.                 *x = width - 2;
  74.         }
  75.         if (*y > hight - 2)
  76.         {
  77.                 *y = hight - 2;
  78.         }
  79.         if (*x < 1)
  80.         {
  81.                 *x = 1;
  82.         }
  83.         if (*y < 1)
  84.         {
  85.                 *y = 1;
  86.         }
  87. }
  88. void drawBall(int x, int y)    //**通过坐标打印 O
  89. {
  90.         gotoxy(x, y); printf("O\n");
  91. }
  92. void clearBall(int x, int y)   //**消除 0
  93. {
  94.         gotoxy(x, y); printf(" \n");
  95. }
  96. void Deriction(int x, int y, int *xSpeed, int *ySpeed)   //**判断0的运动方向
  97. {
  98.         if (x >= width - 2)
  99.                 *xSpeed = -*xSpeed;
  100.         if (y >= hight - 2)
  101.                 *ySpeed = -*ySpeed;
  102. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-20 00:46:18 | 显示全部楼层    本楼为最佳答案   
最后一个函数有问题
  1. void Deriction(int x, int y, int *xSpeed, int *ySpeed)   //**判断0的运动方向
  2. {
  3.     if (x <=1 || x >= width - 2)
  4.         *xSpeed = -*xSpeed;
  5.     if (y <=1 || y >= hight - 2)
  6.         *ySpeed = -*ySpeed;
  7. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-10-20 17:16:11 | 显示全部楼层
superbe 发表于 2019-10-20 00:46
最后一个函数有问题

em       都没注意到   谢谢指出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表