欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

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

實現(xiàn)的效果如圖

先來講一下我的思路吧

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

下面是我的代碼

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

#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();//初始化數(shù)字
void _up();//向上移動
void _down();//向下移動
void _left();//像左移動
void _right();//向右移動
void add_number();//增加一個數(shù)字
int a[4][4] = { 0 };
int emtpy;
//空格的數(shù)量
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();
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。

上一篇:關于C++函數(shù)模版的實現(xiàn)講解

欄    目:C語言

下一篇:C++標準模板庫vector的常用操作

本文標題:C語言實現(xiàn)2048游戲(ege圖形庫版)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/600.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有