国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言實現2048游戲(ege圖形庫版)

2020-05-23 13:23:10
字體:
來源:轉載
供稿:網友

這幾天看到我們班上一個大神寫了一個2048出來,我自己也想嘗試一下,經過幾天自己嘗試努力下,自己終于寫出來了。現在和大家分享一下,也希望能得到大神的指點。

實現的效果如圖

C語言,2048,游戲,ege

先來講一下我的思路吧

1.首先肯定是要一個4X4的二維數組來存放數字存放0、2、4……
2.游戲開始與過程中需要隨機出現2或者4,所以需要調用time.h這個庫
3.游戲開始時,假如當獲取字符為‘w'則先用循環判定這個數字的下方有無和它相等的數字。如無則跳過,如有相加。然后在判定是否可以向上移動

下面是我的代碼 

(我本來是還要寫一個撤回的函數 可惜寫出來卻不能運行。求大神指教)

#include<stdio.h>//#include<conio.h>#include<graphics.h>#include<Windows.h>#include<time.h>int _back[4][4] = {};void draw();//繪圖void play();void init();//初始化數字void _up();//向上移動void _down();//向下移動void _left();//像左移動void _right();//向右移動void add_number();//增加一個數字int a[4][4] = { 0 };int emtpy;//空格的數量void draw(){  int i, j;  for (i = 0; i < 4; i++)  {    for (j = 0; j < 4; j++)    {      _back[i][j] = a[i][j];      PIMAGE img;      img = newimage();      switch (a[i][j])      {      case 0:      {        getimage(img, "2048//0.png");        putimage(j * 180, i * 180, img);        break;      }      case 2:      {        getimage(img, "2048//2.png");        putimage(j * 180, i * 180, img);        break;      }      case 4:      {        getimage(img, "2048//4.png");        putimage(j * 180, i * 180, img);        break;      }      case 8:      {        getimage(img, "2048//8.png");        putimage(j * 180, i * 180, img);        break;      }      case 16:      {        getimage(img, "2048//16.png");        putimage(j * 180, i * 180, img);        break;      }      case 32:      {        getimage(img, "2048//32.png");        putimage(j * 180, i * 180, img);        break;      }      case 64:      {        getimage(img, "2048//64.png");        putimage(j * 180, i * 180, img);        break;      }      case 128:      {        getimage(img, "2048//128.png");        putimage(j * 180, i * 180, img);        break;      }      case 256:      {        getimage(img, "2048//256.png");        putimage(j * 180, i * 180, img);        break;      }      case 512:      {        getimage(img, "2048//512.png");        putimage(j * 180, i * 180, img);        break;      }      case 1024:      {        getimage(img, "2048//1024.png");        putimage(j * 180, i * 180, img);        break;      }      case 2048:      {        getimage(img, "2048//2048.png");        putimage(j * 180, i * 180, img);        break;      }      }    }  }}void init(){  int x, y;  srand(time(0));  x = rand() % 4;  y = rand() % 4;  a[x][y] = 2;  emtpy = 15;}void _up(){  int x, y, i;  for (y = 0; y < 4; ++y) {   // 從上向下合并相同的方塊     for (x = 0; x < 4; ++x) {      if (a[x][y] == 0)        ;      else {        for (i = x + 1; i < 4; ++i) {          if (a[i][y] == 0)            ;          else if (a[x][y] == a[i][y]) {            a[x][y] += a[i][y];            a[i][y] = 0;            ++emtpy;            x = i;            break;          }          else {            break;          }        }      }    }  }  for (y = 0; y < 4; ++y)  // 向上移動箱子    for (x = 0; x < 4; ++x)    {      if (a[x][y] == 0)        ;      else {        for (i = x; (i > 0) && (a[i - 1][y] == 0); --i) {          a[i - 1][y] = a[i][y];          a[i][y] = 0;        }      }    }}void _down() {  int x, y, i;  for (y = 0; y < 4; ++y) // 向下合并相同的方格     for (x = 3; x >= 0; --x) {      if (a[x][y] == 0)        ;      else {        for (i = x - 1; i >= 0; --i) {          if (a[i][y] == 0)            ;          else if (a[x][y] == a[i][y]) {            a[x][y] += a[i][y];            a[i][y] = 0;            ++emtpy;            x = i;            break;          }          else            break;        }      }    }  for (y = 0; y < 4; ++y) // 向下移動方格     for (x = 3; x >= 0; --x) {      if (a[x][y] == 0)        ;      else {        for (i = x; (i < 3) && (a[i + 1][y] == 0); ++i) {          a[i + 1][y] = a[i][y];          a[i][y] = 0;        }      }    }}void _left(){  int x, y, i;  for (x = 0; x < 4; ++x)  // 向左合并相同的方格     for (y = 0; y < 4; ++y) {      if (a[x][y] == 0)        ;      else {        for (i = y + 1; i < 4; ++i) {          if (a[x][i] == 0)            ;          else if (a[x][y] == a[x][i]) {            a[x][y] += a[x][i];            a[x][i] = 0;            emtpy++;            y = i;            break;          }          else            break;        }      }    }  for (x = 0; x < 4; ++x) // 向左移動方格     for (y = 0; y < 4; ++y) {      if (a[x][y] == 0)        ;      else {        for (i = y; (i > 0) && (a[x][i - 1] == 0); --i) {          a[x][i - 1] = a[x][i];          a[x][i] = 0;        }      }    }}void _right() {  int x, y, i;  for (x = 0; x < 4; ++x) // 向右合并相同的方格     for (y = 3; y >= 0; --y) {      if (a[x][y] == 0)        ;      else {        for (i = y - 1; i >= 0; --i) {          if (a[x][i] == 0)            ;          else if (a[x][y] == a[x][i]) {            a[x][y] += a[x][i];            a[x][i] = 0;            ++emtpy;            y = i;            break;          }          else            break;        }      }    }  for (x = 0; x < 4; ++x)  // 向右移動方格     for (y = 3; y >= 0; --y) {      if (a[x][y] == 0)        ;      else {        for (i = y; (i < 3) && (a[x][i + 1] == 0); ++i) {          a[x][i + 1] = a[x][i];          a[x][i] = 0;        }      }    }}void add_number(){  srand(time(0));  if (emtpy > 0)  {    int x, y, temp;    do    {      x = rand() % 4;      y = rand() % 4;    } while (a[x][y] != 0);    temp = rand();    int i = temp % 2;    if (i == 1)    {      a[x][y] = 2;      emtpy--;    }    else    {      a[x][y] = 4;      emtpy--;    }  }}void play(){  char c = getch();  switch (c)  {  case 'w':  case'W':  {    _up();    add_number();    draw();    break;  }  case 's':  case'S':  {    _down();    add_number();    draw();    break;  }  case 'a':  case'A':  {    _left();    add_number();    draw();    break;  }case 'd':  case'D':  {    _right();    add_number();    draw();    break;  }  case 'q':  case 'Q':  {    for (int i = 0; i < 4; i++)    {      for (int j = 0; j < 4; j++)      {        a[i][j] = _back[i][j];        draw();      }    }  }  }}int main(){  init();  int i, j;  initgraph(724, 724);//初始化  PIMAGE img;  img = newimage();  getimage(img, "2048/背景.jpg");  putimage(0, 0, img);  draw();  for (; is_run(); delay_fps(30))  {    for (int i = 0; i < 4; i++)    {      for (int j = 0; j < 4; j++)      {        _back[i][j] = a[i][j];      }    }    play();  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门县| 文水县| 永寿县| 阿城市| 嘉鱼县| 绥棱县| 库尔勒市| 霍城县| 蓝田县| 镶黄旗| 襄城县| 柳州市| 泌阳县| 腾冲县| 财经| 静安区| 富阳市| 霍城县| 鹤庆县| 保康县| 定兴县| 天柱县| 鹤山市| 改则县| 东丽区| 珠海市| 岚皋县| 乌兰察布市| 石景山区| 大庆市| 泰宁县| 新河县| 察隅县| 阿巴嘎旗| 赣州市| 双桥区| 霍城县| 岳池县| 崇信县| 偏关县| 嘉善县|