91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

發布時間:2021-06-12 17:24:38 來源:億速云 閱讀:218 作者:Leah 欄目:系統運維

這篇文章將為大家詳細講解有關Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

在ubuntu下安裝curses圖形庫命令

sudo apt-get install libncurses5-dev

雙buff是一個非常優秀的機制,之前寫貪吃蛇的時候,如果不使用雙buff屏幕跳動會很劇烈,使用了雙buff后體驗就非常好。

我們使用curses圖形庫也是一樣,如果沒有調用refresh()函數之前,顯示的屏幕是不會進行更新的。

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

比如下面這段代碼

#include <unistd.h>  #include <stdlib.h>  #include <curses.h>  int main()  {      initscr();      /* We move the cursor to the point (5,15) on the logical screen,         print "Hello World" and refresh the actual screen.         Lastly, we use the call sleep(2) to suspend the program for two seconds,         so we can see the output before the program ends. */      move(5, 15);      addstr("Hello World");      refresh();      sleep(2);      endwin();      exit(EXIT_SUCCESS);  }

使用下面的命令編譯并運行

gcc -o t screen1.c -lncurses && ./t

首先初始化一個屏幕,然后移動到屏幕的 5,15位置,在輸出字符串 Hello World。之后休眠 2秒后,程序退出。

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

使用curses寫貪吃蛇代碼

//sudo apt-get install libncurses5-dev  //gcc -o t tanchishe.c -lncurses && ./t  #include <curses.h> // Linux 下的圖形庫  #include <unistd.h> // usleep()  #include <stdlib.h> // rand()  #include <time.h>   // time()  #define W 40  #define H 24  int m[W * H], q[W * H], p = H / 2 * W + (W / 2), a, h = 0, t = 0, d = 1, i;  int main(void) {      initscr(); noecho(); keypad(stdscr, 1); nodelay(stdscr, 1); curs_set(0);      srand(time(NULL));     for (i = 0; i < W * H; i++)          m[i] = !(i / W % (H - 1) && i % W % (W - 1));      m[q[t = (t + 1) % (W * H)] = p] = 1;      do { a = rand() % (W * H); } while (m[a]);      while ((i = getch()) != 27) {          if      (i == KEY_UP    && d !=  W) d = -W;          else if (i == KEY_DOWN  && d != -W) d =  W;          else if (i == KEY_LEFT  && d !=  1) d = -1;          else if (i == KEY_RIGHT && d != -1) d =  1;          if (m[p += d]) break;          m[q[t = (t + 1) % (W * H)] = p] = 1;          if (p == a) do { a = rand() % (W * H); } while (m[a]);          else m[q[h = (h + 1) % (W * H)]] = 0;          for (i = 0; i < W * H; i++)              mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : "  ");          mvaddstr(a / W, (a % W) * 2, "()");          refresh();          usleep(100000);      }      while (getch() == ERR);      endwin();  }

程序運行

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

簡單解釋下

for (i = 0; i < W * H; i++)              mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : "  ");

構建邊框和蛇身的代碼,邊框是用 [] 構建的,用這個字符從視覺上看會比較舒服。

mvaddstr(a / W, (a % W) * 2, "()");

隨機生成的食物,之前已經用時間srand(time(NULL));作為種子設置了隨機數。

if (m[p += d]) break;

碰撞檢測

if (p == a) do { a = rand() % (W * H); } while (m[a]);          else m[q[h = (h + 1) % (W * H)]] = 0;

如果碰撞到了食物,就增加蛇長度,m[]里面同時保存蛇的數據和邊框的數據,并且蛇移動的時候,需要把后面的數值設置為0。

p = H / 2 * W + (W / 2)

蛇的初始位置

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

自己修改的代碼,可以實現穿墻效果

//sudo apt-get install libncurses5-dev  //gcc -o t tanchishe.c -lncurses && ./t #include <curses.h> // Linux 下的圖形庫  #include <unistd.h> // usleep()  #include <stdlib.h> // rand()  #include <time.h>   // time()  #define W 40  #define H 24  int m[W * H], q[W * H], p = H / 2 * W + (W / 2), a, h = 0, t = 0, d = 1, i,j=3;  int main(void) {      initscr(); noecho(); keypad(stdscr, 1); nodelay(stdscr, 1); curs_set(0);      srand(time(NULL));      for (i = 0; i < W * H; i++) m[i] = !(i / W % (H - 1) && i % W % (W - 1));      m[q[t = (t + 1) % (W * H)] = p] = 1;      do { a = rand() % (W * H); } while (m[a]);      while ((i = getch()) != 27) {          if      (i == KEY_UP    && d !=  W) {d = -W;j=0;}          else if (i == KEY_DOWN  && d != -W) {d =  W;j=1;}          else if (i == KEY_LEFT  && d !=  1) {d = -1;j=2;}          else if (i == KEY_RIGHT && d != -1) {d =  1;j=3;}          if (m[p += d]) {              switch(j){                  case 0:p = p+(H-2)*W; break;                  case 1:p = p-(H-2)*W; break;                  case 2:p = p+W-2; break;                  case 3:p = p-W+2; break;                  default: p = H / 2 * W + (W / 2); break;              }          };          m[q[t = (t + 1) % (W * H)] = p] = 1;          if (p == a) do { a = rand() % (W * H); } while (m[a]);          else m[q[h = (h + 1) % (W * H)]] = 0;          for (i = 0; i < W * H; i++){              mvaddstr(i / W, (i % W) * 2, m[i] ? "[]" : "  ");          }          mvaddstr(a / W, (a % W) * 2, "()");          refresh();         usleep(100000);      }      while (getch() == ERR);      endwin();  }

運行如下:

Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲

關于Linux在怎么使用curses圖形庫實現一個貪吃蛇游戲就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 红原县| 郎溪县| 芦溪县| 永寿县| 大英县| 灵宝市| 宜良县| 闻喜县| 镇康县| 屯留县| 德化县| 衡山县| 明星| 武宁县| 来凤县| 碌曲县| 南宫市| 芦山县| 类乌齐县| 泾源县| 玉树县| 瑞丽市| 织金县| 麻江县| 桃源县| 宜阳县| 兴化市| 大同县| 犍为县| 新巴尔虎右旗| 卢湾区| 花莲县| 桂平市| 盐城市| 科技| 鹤壁市| 泸西县| 武陟县| 汉阴县| 丰台区|