方向键控制移动移动.cpp

Code:
  1. #include<stdio.h>   
  2. #include<conio.h>   
  3. #include<string.h>   
  4. #include<iostream.h>   
  5. #include<windows.h>   
  6.   
  7. void gotoxy(int x,int y)   
  8. {   
  9.     COORD c;   
  10.     c.X=x;   
  11.     c.Y=y;   
  12.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);   
  13.        
  14. }   
  15. static int pointx=0,pointy=0;   
  16. //static int x=0,y=0;//x表示列,y表示行   
  17.   
  18. void main()   
  19. {   
  20.     int x=0,y=0;   
  21.     int i=1;   
  22.     char ch1,ch2,ch3,ch4;   
  23.     ch1='/x4b';   
  24.     ch2='/x4d';   
  25.     ch3='/x48';   
  26.     ch4='/x50';   
  27.        
  28.     char t;   
  29.     while(1)   
  30.     {   
  31.         t=getch();   
  32.         if(t==ch1)//往左   
  33.         {   
  34.             x=pointx;   
  35.             y=pointy;   
  36.             //if(left==0)//第一次往左   
  37.             //{   
  38.             if((x==0) && (y==0))//一开始就往左走,起点   
  39.             {   
  40.                 printf("●");   
  41.                 pointx++;//此时光标在(1,0),point==1   
  42.            
  43.             }   
  44.   
  45.             else  
  46.             {   
  47.                 if(x==2)//point==1光标到“起点”的下个位置了,定位到起点同样输出●   
  48.                 {   
  49.                     gotoxy(x-2,y);   
  50.                     printf("●");   
  51.                     pointx--;   
  52.                 }   
  53.                 else if(x==1)   
  54.                 {}   
  55.                    
  56.                 else  
  57.                 {   
  58.   
  59.                     gotoxy(x-2,y);   
  60.                     pointx--;   
  61.                     printf("←");   
  62.   
  63.                 }      
  64.             }   
  65.         }   
  66.         else if(t==ch2)//往右   
  67.         {   
  68.             x=pointx;   
  69.             y=pointy;   
  70.   
  71.             if((x==0) && (y==0))   
  72.             {   
  73.                 printf("●");   
  74.                 pointx++;   
  75.             }   
  76.             else  
  77.             {   
  78.                 if(x!=78)   
  79.                 {   
  80.                     gotoxy(x,y);//如果不重新定位以前的图标会存在,重新定位后以前图标消失   
  81.                     printf("→");   
  82.        
  83.                     pointx++;   
  84.                 }   
  85.                 else  
  86.                 {   
  87.                     gotoxy(x,y);   
  88.                     printf(" ");   
  89.                     pointx=0;   
  90.                     pointy++;   
  91.                 }   
  92.                    
  93.             }   
  94.         }   
  95.         else if(t==ch3)    
  96.         {   
  97.             x=pointx;   
  98.             y=pointy;   
  99.                
  100.             if((x==0) && (y==0))   
  101.             {   
  102.                 printf("●");   
  103.                 pointx++;   
  104.   
  105.             }   
  106.             else if(y==0) {}   
  107.             else  
  108.             {   
  109.                 gotoxy(x,y);   
  110.                 printf(" ");   
  111.                 x=++pointx;   
  112.                 gotoxy(x-2,y-1);   
  113.                 x=pointx=x-2;   
  114.                 y=pointy=y-1;   
  115.                 if((x==0) && (y==0))   
  116.                 {   
  117.                     printf("●");   
  118.                     pointx++;   
  119.                 }   
  120.                 else  
  121.                 {   
  122.                     printf("↑");   
  123.                     pointx++;   
  124.                 }   
  125.             }   
  126.         }   
  127.   
  128.         else if(t==ch4)    
  129.         {   
  130.             x=pointx;   
  131.             y=pointy;   
  132.                
  133.             if((x==0) && (y==0))   
  134.             {   
  135.                 printf("●");   
  136.                 pointx++;   
  137.             }   
  138.             else  
  139.             {   
  140.                    
  141.                 if(y<298)   
  142.                 {   
  143.                     gotoxy(x,y);   
  144.                     printf(" ");   
  145.                     x=++pointx;   
  146.                     gotoxy(x-2,y+1);   
  147.                     pointx=x-2;   
  148.                     pointy=y+1;   
  149.                     printf("↓");   
  150.   
  151.                     pointx++;   
  152.   
  153.                 }   
  154.                 else if(y==298)   
  155.                 {   
  156.                     gotoxy(x,y);   
  157.                     printf(" ");   
  158.                     x=++pointx;   
  159.                     gotoxy(x-2,y+1);   
  160.                     x=pointx=x-2;   
  161.                     pointy=y+1;   
  162.                     if(x==0)   
  163.                         printf("●");   
  164.                     else printf("↓");   
  165.                     pointx++;   
  166.   
  167.                 }   
  168.                    
  169.             }   
  170.   
  171.         }   
  172.     }   
  173. }  

 无聊之作,基于控制台程序环境下,利用键盘上的方向键可以控制光标的移动,

要通过单个按键控制八个LED灯左右移动,首先需要确定LED灯是如何连接和控制的。通常,你可以采用扫描或矩阵的方式来实现这种功能。这里提供一种基本的思路: 1. **硬件设计**:将8个LED灯并行连接,每个LED对应一个独立的数字引脚。如果使用微控制器如Arduino,可以选择P0~P7这样的I/O口分别驱动。 2. **软件控制**: - 使用按键中断,当按键按下时开始计数,释放时停止计数。例如,如果你有一个上升沿触发的中断,可以设置按键下按时为0,松开时为1,这样每按一次加一。 3. **LED移动逻辑**: - 设定一个变量(如counter),每次按键事件后加1或减1,代表LED移动的方向。比如0-4向左移动,5-8向右移动。 - 根据counter的值,利用定时器或者循环结构依次点亮每个LED。例如,从第一个LED开始,每隔一定的步长(可能是LED的数量除以8),切换到下一个LED,直到遍历完整个周期。 4. **程序示例(使用Arduino)**: ```cpp int ledPin[8] = {2, 3, 4, 5, 6, 7, 8, 9}; // LED连接的IO口 int buttonPin = 10; // 按键连接的IO口 int counter = 0; void setup() { pinMode(buttonPin, INPUT_PULLUP); for (int i = 0; i < 8; i++) { pinMode(ledPin[i], OUTPUT); } } void loop() { if (digitalRead(buttonPin) == LOW) { // 按键按下 counter++; if (counter > 8) counter = 0; // 循环处理 } else { counter--; if (counter < 0) counter = 8; } digitalWrite(ledPin[counter % 8], HIGH); // 控制LED灯亮起 delay(100); // 短暂延时,让灯光效果更明显 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值