久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8416|回復: 11
打印 上一主題 下一主題
收起左側

STM32F103小游戲機源程序 五子棋+貪吃蛇+黃金礦工

  [復制鏈接]
跳轉到指定樓層
樓主
硬件需求:4.3寸電容屏TFTLCD,STM32F1精英版使用的是寄存器版本!!!
制作出來的實物圖如下:


單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"                           
  4. #include "lcd.h"
  5. #include "touch.h"
  6. #include "timer.h"
  7. #include "game.h"
  8. #include "beep.h"
  9. #include "led.h"
  10. #include "stdlib.h"





  11. u8 game_switch=0;
  12. u16 random_num=1;

  13. void choose_game(void);

  14. /////////黃金礦工
  15. u8 game_mode=0;
  16. u8 game_grade=1;
  17. u16 target_score[5]={650,1295,2010,3095,4450};
  18. u16 your_score=0;
  19. u8 game_time=60;
  20. u8 hook_down_sign=0;
  21. void golden_miner(void);

  22. ////////////五子棋
  23. void gobang(void);
  24. u8 key_sign=0;
  25. u8 go_bang[16][16]={0};
  26. u8 key_do_sign=0;
  27. void go_check(u8 x,u8 y);
  28. void gobang_win(u8 x,u8 y);
  29. u8 gobang_color=0;
  30. u8 b1,b2;

  31. /////////////////貪吃蛇
  32. void greedy_snake(void);
  33. u8 direction=0;  // 0上  1左 2下 3右
  34. u8 center_x=240,center_y=240;
  35. u8 length=0;
  36. u16 snake[100][2]={0};
  37. u8 change_sign=0;
  38. u8 food_x,food_y;
  39. u8 snake_result=0;


  40. //           lcddev.width  800    lcddev.height 480
  41. int main(void)
  42. {               
  43.         Stm32_Clock_Init(9);        //系統時鐘設置
  44.         uart_init(72,115200);        //串口初始化為115200
  45.         delay_init(72);                            //延時初始化
  46.         LED_Init();                                  //初始化與LED連接的硬件接口
  47.         LCD_Init();                                   //初始化LCD         
  48.         BEEP_Init(); ////初始化蜂鳴器
  49.        
  50.        
  51.         LCD_Display_Dir(1);//橫屏       
  52.         tp_dev.init();                        //觸摸屏初始化
  53.         POINT_COLOR=RED;//設置字體為紅色

  54.         if(tp_dev.touchtype&0X80)
  55.         {
  56.                 while(1)
  57.                 {
  58.                         while(tp_dev.x[0]!=65535&&tp_dev.x[0]!=0);
  59.                         switch(game_switch)
  60.                         {
  61.                                 case 0:
  62.                                         choose_game();
  63.                                         break;
  64.                                 case 1:
  65.                                         golden_miner();
  66.                                         break;
  67.                                 case 2:
  68.                                         gobang();
  69.                                         break;
  70.                                 case 3:
  71.                                         greedy_snake();
  72.                                         break;
  73.                         }
  74.                 }
  75.         }
  76.         else
  77.                 while(1)
  78.                 {
  79.                         LCD_ShowString(30,130,200,16,16," Please use a 4.3 inch");//電阻屏才顯示
  80.                         LCD_ShowString(30,160,200,16,16,"   capacitive screen");       
  81.                 }
  82. }


  83. void golden_miner()
  84. {
  85.         u8 clear_sign=0;
  86.         TIM3->CR1&=0; ///////關閉定時器
  87.         game_start();//繪制開始界面
  88.         TIM3_Int_Init(99,7199);//10Khz的計數頻率,計數100次10ms
  89.         while(game_switch==1)
  90.         {
  91.                 static u16 coordinate[2];//////////存放松開前的觸摸坐標
  92.                 switch(game_mode)
  93.                 {
  94.                         case(0):
  95.                                         if(tp_dev.x[0]>306&&tp_dev.y[0]>176&&tp_dev.x[0]<486&&tp_dev.y[0]<286&&clear_sign==0)//////判斷是否觸摸到開始按鈕
  96.                                         {
  97.                                                 LCD_Fill(296,166,496,296,GLOD);/////////////開始按鈕放大處理
  98.                                                 POINT_COLOR=RED;
  99.                                                 LCD_ShowString(356,216,200,24,32,"start");
  100.                                                 clear_sign=1;
  101.                                         }
  102.                                         if(clear_sign==1&&(tp_dev.sta&0x80)==0)//////////判斷是否已經放大且是否已經觸摸完畢
  103.                                         {
  104.                                                 clear_sign=0;
  105.                                                 if(coordinate[0]>296&&coordinate[1]>166&&coordinate[0]<496&&coordinate[1]<296)//判斷觸摸完畢前是否停留在開始按鈕范圍內
  106.                                                 {
  107.                                                         game_mode=1;/////////進入下一個狀態
  108.                                                 }
  109.                                                 else
  110.                                                 {
  111.                                                         game_start();///////////重新繪制開始界面
  112.                                                 }
  113.                                         }
  114.                                         else
  115.                                         {
  116.                                                 coordinate[0]=tp_dev.x[0];coordinate[1]=tp_dev.y[0];///////////記錄當前按下的坐標
  117.                                         }
  118.                                         break;
  119.                         case(1):
  120.                                         game_transition();/////////////////繪制過渡界面
  121.                                         TIM3->CR1&=0;//關閉定時器
  122.                                         delay_ms(1000);delay_ms(1000);delay_ms(1000);//等待3s
  123.                                         TIM3->CR1|=0x01;//打開定時器
  124.                                         game_set();/////////////繪制關卡界面
  125.                                         POINT_COLOR=BLACK;
  126.                                         game_mode=2;///////////進入下一個狀態
  127.                                         break;
  128.                         case(2):
  129.                                         break;
  130.                 }
  131.         }       
  132. }


  133. void gobang()
  134. {
  135.         u8 go_x,go_y,i,j;
  136.         u8 last_x,last_y;

  137.         TIM3->CR1&=0; ///////關閉定時器
  138.         gobang_start();//////繪制初始界面
  139.         TIM3_Int_Init(99,7199);//10Khz的計數頻率,計數100次10ms
  140.         while(game_switch==2)
  141.         {
  142.                 if(key_sign==1&&key_do_sign==0&&tp_dev.x[0]<480&&tp_dev.y[0]<480)
  143.                 {
  144.                         key_do_sign=1;
  145.                         key_sign=0;
  146.                         go_x=(tp_dev.x[0]-15)/30+((tp_dev.x[0]-15)%30)/15;
  147.                         go_y=(tp_dev.y[0]-15)/30+((tp_dev.y[0]-15)%30)/15;
  148.                         if(go_bang[go_x][go_y]==0)
  149.                         {
  150.                                 if(gobang_color==0)/////////黑色
  151.                                 {
  152.                                         gobang_color=1;
  153.                                         go_bang[go_x][go_y]=1;
  154.                                         gui_fill_circle(go_x*30+15,go_y*30+15,10,BLACK);
  155.                                         b1++;
  156.                                         LCD_ShowxNum(660,100,b1,2,32,0);
  157.                                 }
  158.                                 else/////////白色
  159.                                 {
  160.                                         gobang_color=0;
  161.                                         go_bang[go_x][go_y]=2;
  162.                                         gui_fill_circle(go_x*30+15,go_y*30+15,10,WHITE);
  163.                                         b2++;
  164.                                         LCD_ShowxNum(660,150,b2,2,32,0);
  165.                                 }
  166.                                 go_check(go_x,go_y);
  167.                                 last_x=go_x;last_y=go_y;
  168.                         }
  169.                 }
  170.                 else
  171.                 {
  172.                         if(key_sign==1)
  173.                         {
  174.                                 key_sign=0;
  175.                                 if(tp_dev.x[0]>480&&tp_dev.x[0]<640&&tp_dev.y[0]>345)///////////按下悔棋
  176.                                 {
  177.                                         while(tp_dev.x[0]!=65535);//////////等待抬起
  178.                                         gui_fill_circle(last_x*30+15,last_y*30+15,10,BROWN);
  179.                                        
  180.                                         if(last_x>0&&last_x<15)lcd_draw_bline(last_x*30,15+last_y*30,30+last_x*30,15+last_y*30,1,BLACK);
  181.                                         else
  182.                                                 if(last_x==0)lcd_draw_bline(15+last_x*30,15+last_y*30,30+last_x*30,15+last_y*30,1,BLACK);
  183.                                                 else lcd_draw_bline(last_x*30,15+last_y*30,15+last_x*30,15+last_y*30,1,BLACK);
  184.                                         if(last_y>0&&last_y<15)lcd_draw_bline(15+last_x*30,last_y*30,15+last_x*30,30+last_y*30,1,BLACK);
  185.                                         else
  186.                                                 if(last_y==0)lcd_draw_bline(15+last_x*30,last_y*30+15,15+last_x*30,30+last_y*30,1,BLACK);
  187.                                                 else lcd_draw_bline(15+last_x*30,last_y*30,15+last_x*30,15+last_y*30,1,BLACK);
  188.                                        
  189.                                        
  190.                                         if(go_bang[last_x][last_y]==1){b1--;LCD_ShowxNum(660,100,b1,2,32,0);gobang_color=0;go_bang[last_x][last_y]=0;}
  191.                                         else if(go_bang[last_x][last_y]==2){b2--;LCD_ShowxNum(660,150,b2,2,32,0);gobang_color=1;go_bang[last_x][last_y]=0;}
  192.                                 }
  193.                                 else
  194.                                 {
  195.                                         if(tp_dev.x[0]>640&&tp_dev.x[0]<800&&tp_dev.y[0]>345)/////////////跳到選擇游戲界面
  196.                                         {
  197.                                                 while(tp_dev.x[0]!=65535);//////////等待抬起
  198.                                                 game_switch=0;
  199.                                                         //////////////數值初始化
  200.                                                 for(i=0;i<17;i++)
  201.                                                 {
  202.                                                         for(j=0;j<17;j++)go_bang[i][j]=0;
  203.                                                 }
  204.                                                 key_sign=0;
  205.                                                 key_do_sign=1;
  206.                                                 gobang_color=0;
  207.                                                 b1=0;b2=0;
  208.                                         }
  209.                                 }
  210.                         }
  211.                 }
  212.         }
  213. }


  214. void go_check(u8 x,u8 y)
  215. {
  216.         u8 l_x=x,l_y=y;
  217.         u8 num=1;
  218.         u8 sign=0;
  219.        
  220.         //////////橫
  221.         while(1)
  222.         {
  223.                 if(sign==0)
  224.                 {
  225.                         if(l_x>0)
  226.                         {
  227.                                 l_x=l_x-1;
  228.                                 if(go_bang[l_x][y]==go_bang[x][y])
  229.                                 {
  230.                                         num++;
  231.                                         if(num>=5)
  232.                                         {
  233.                                                 gobang_win(x,y);
  234.                                                 break;
  235.                                         }
  236.                                 }///////勝利                       
  237.                                 else {sign=1;l_x=x;}
  238.                         }
  239.                         else {sign=1;l_x=x;}
  240.                 }
  241.                 else
  242.                 {
  243.                         if(l_x<15)
  244.                         {
  245.                                 l_x=l_x+1;
  246.                                 if(go_bang[l_x][y]==go_bang[x][y])
  247.                                 {
  248.                                         num++;
  249.                                         if(num>=5)
  250.                                         {
  251.                                                 gobang_win(x,y);
  252.                                                 break;
  253.                                         }
  254.                                 }///////勝利       
  255.                                 else {num=1;break;}
  256.                         }
  257.                         else {num=1;break;}
  258.                 }
  259.         }
  260.        
  261.         ///////豎
  262.         l_x=x;
  263.         l_y=y;
  264.         sign=0;
  265.        
  266.         if(num==1)
  267.         {
  268.                 while(1)
  269.                 {
  270.                         if(sign==0)
  271.                         {
  272.                                 if(l_y>0)
  273.                                 {
  274.                                         l_y=l_y-1;
  275.                                         if(go_bang[x][l_y]==go_bang[x][y])
  276.                                         {
  277.                                                 num++;
  278.                                                 if(num>=5)
  279.                                                 {
  280.                                                         gobang_win(x,y);
  281.                                                         break;
  282.                                                 }
  283.                                         }///////勝利       
  284.                                         else {sign=1;l_y=y;}
  285.                                 }
  286.                                 else {sign=1;l_y=y;}
  287.                         }
  288.                         else
  289.                         {
  290.                                 if(l_y<15)
  291.                                 {
  292.                                         l_y=l_y+1;
  293.                                         if(go_bang[x][l_y]==go_bang[x][y])
  294.                                         {
  295.                                                 num++;
  296.                                                 if(num>=5)
  297.                                                 {
  298.                                                         gobang_win(x,y);
  299.                                                         break;
  300.                                                 }
  301.                                         }///////勝利       
  302.                                         else {num=1;break;}
  303.                                 }
  304.                                 else {num=1;break;}
  305.                         }
  306.                 }
  307.         }
  308.         //////////////斜著   左上 右下
  309.         l_x=x;
  310.         l_y=y;
  311.         sign=0;
  312.        
  313.         if(num==1)
  314.         {
  315.                 while(1)
  316.                 {
  317.                         if(sign==0)
  318.                         {
  319.                                 if(l_y>0)
  320.                                 {
  321.                                         l_x=l_x-1;
  322.                                         l_y=l_y-1;
  323.                                         if(go_bang[l_x][l_y]==go_bang[x][y])
  324.                                         {
  325.                                                 num++;
  326.                                                 if(num>=5)
  327.                                                 {
  328.                                                         gobang_win(x,y);
  329.                                                         break;
  330.                                                 }
  331.                                         }///////勝利       
  332.                                         else {sign=1;l_x=x;l_y=y;}
  333.                                 }
  334.                                 else {sign=1;l_x=x;l_y=y;}
  335.                         }
  336.                         else
  337.                         {
  338.                                 if(l_y<15)
  339.                                 {
  340.                                         l_x=l_x+1;
  341.                                         l_y=l_y+1;
  342.                                         if(go_bang[l_x][l_y]==go_bang[x][y])
  343.                                         {
  344.                                                 num++;
  345.                                                 if(num>=5)
  346.                                                 {
  347.                                                         gobang_win(x,y);
  348.                                                         break;
  349.                                                 }
  350.                                         }///////勝利       
  351.                                         else {num=1;break;}
  352.                                 }
  353.                                 else {num=1;break;}
  354.                         }
  355.                 }
  356.         }
  357.                 //////////////斜著   左下右上
  358.         l_x=x;
  359.         l_y=y;
  360.         sign=0;
  361.        
  362.         if(num==1)
  363.         {
  364.                 while(1)
  365.                 {
  366.                         if(sign==0)
  367.                         {
  368.                                 if(l_x>0&&l_y<15)
  369.                                 {
  370.                                         l_x=l_x-1;
  371.                                         l_y=l_y+1;
  372.                                         if(go_bang[l_x][l_y]==go_bang[x][y])
  373.                                         {
  374.                                                 num++;
  375.                                                 if(num>=5)
  376.                                                 {
  377.                                                         gobang_win(x,y);
  378.                                                         break;
  379.                                                 }
  380.                                         }///////勝利       
  381.                                         else {sign=1;l_x=x;l_y=y;}
  382.                                 }
  383.                                 else {sign=1;l_x=x;l_y=y;}
  384.                         }
  385.                         else
  386.                         {
  387.                                 if(l_x<15&&l_y>0)
  388.                                 {
  389.                                         l_x=l_x+1;
  390.                                         l_y=l_y-1;
  391.                                         if(go_bang[l_x][l_y]==go_bang[x][y])
  392.                                         {
  393.                                                 num++;
  394.                                                 if(num>=5)
  395.                                                 {
  396.                                                         gobang_win(x,y);
  397.                                                         break;
  398.                                                 }
  399.                                         }///////勝利       
  400.                                         else {num=1;break;}
  401.                                 }
  402.                                 else {num=1;break;}
  403.                         }
  404.                 }
  405.         }
  406. }

  407. //////勝利
  408. void gobang_win(u8 x,u8 y)
  409. {
  410.         u8 i,j;
  411.         TIM3->CR1&=0; ///////關閉定時器
  412.         POINT_COLOR=RED;
  413.         LCD_Fill(135,135,345,285,WHITE);
  414.         if(go_bang[x][y]==1)LCD_ShowString(165,195,200,24,32,"black");
  415.         else LCD_ShowString(165,195,200,24,32,"white");
  416.         LCD_ShowString(280,195,200,24,32,"win");

  417.        
  418.         delay_ms(1000);delay_ms(1000);delay_ms(1000);//等待3s
  419.        
  420.         //////////////數值初始化
  421.         for(i=0;i<17;i++)
  422.         {
  423.                 for(j=0;j<17;j++)go_bang[i][j]=0;
  424.         }
  425.         key_sign=0;
  426.         key_do_sign=1;
  427.         gobang_color=0;
  428.         b1=0;b2=0;
  429.        
  430.         gobang_start();//////繪制初始界面
  431.        
  432.         TIM3_Int_Init(99,7199);//10Khz的計數頻率,計數100次10ms
  433. }

  434. ……………………

  435. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
小游戲機.7z (180.79 KB, 下載次數: 239)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:91165 發表于 2020-11-27 12:53 | 只看該作者
下載了謝謝樓主分享,好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:878553 發表于 2021-1-18 19:02 | 只看該作者
我這個為什么選擇游戲進不去呀點了整個屏幕了都進不去游戲界面
回復

使用道具 舉報

地板
ID:893490 發表于 2021-3-19 17:51 | 只看該作者
有這個做跳棋的嗎
回復

使用道具 舉報

5#
ID:626321 發表于 2021-6-2 17:09 | 只看該作者
1509498776 發表于 2021-1-18 19:02
我這個為什么選擇游戲進不去呀點了整個屏幕了都進不去游戲界面

屏幕型號的原因吧
回復

使用道具 舉報

6#
ID:980597 發表于 2021-11-13 14:06 | 只看該作者
HWL0541 發表于 2020-11-27 12:53
下載了謝謝樓主分享,好資料,51黑有你更精彩!!!

請問還要什么部件才能操作?
回復

使用道具 舉報

7#
ID:91165 發表于 2021-11-15 07:09 | 只看該作者
2538931280 發表于 2021-11-13 14:06
請問還要什么部件才能操作?

原子STM32F1精英版開發板就行
回復

使用道具 舉報

8#
ID:987794 發表于 2022-3-23 18:02 | 只看該作者
這個五子棋是人人對戰嗎
回復

使用道具 舉報

9#
ID:626321 發表于 2022-3-25 13:27 | 只看該作者
秋qiu 發表于 2022-3-23 18:02
這個五子棋是人人對戰嗎

是的,,,,,,,
回復

使用道具 舉報

10#
ID:138664 發表于 2022-4-8 22:57 | 只看該作者
感謝樓主分享,正好想學習黃金礦工程序
回復

使用道具 舉報

11#
ID:1127676 發表于 2024-6-30 20:52 | 只看該作者
感謝樓主,正好想學習一下
回復

使用道具 舉報

12#
ID:1137553 發表于 2024-11-25 14:40 | 只看該作者
非常有用
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱xxav| 91看片网站 | 欧美啊v在线观看 | 国产一区二区毛片 | 久久99精品久久久久久国产越南 | 午夜网站视频 | 亚洲一区二区综合 | 国产精品精品视频一区二区三区 | 黄色一级大片在线免费看产 | 伊人焦久影院 | 99影视| 午夜欧美 | 国产在线精品一区二区三区 | 激情毛片| 国产成人综合在线 | 亚洲欧美国产毛片在线 | 婷婷色婷婷 | 欧美激情99 | 国产成人精品一区二区三区四区 | 羞羞视频在线网站观看 | 国产精品99一区二区 | 亚洲在线 | 欧美成人a∨高清免费观看 91伊人 | 国产精品久久久久久久岛一牛影视 | 日韩精品一区二区三区在线播放 | 欧美一级免费看 | 在线观看欧美日韩视频 | www性色 | 伊人电影院av| 欧美日韩国产欧美 | 久久精品一区 | 国产成人一区二区三区精 | 欧美v免费 | 国产精品色 | 一区二区影视 | 久久尤物免费一区二区三区 | 先锋资源吧| 高清国产午夜精品久久久久久 | 国产欧美日韩综合精品一区二区 | 国产综合精品一区二区三区 | 欧美午夜影院 |