简单实现C语言2048游戏

本文实例为大家分享了C语言2048游戏的具体代码,供大家参考,具体内容如下

/*2048*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>   

//全局变量
int x[4][4]={0};
int score=0;
int can_move; 

int empty()
{
  int i,j;
  int n=0;
  for(i=0;i<4;i++)
  {
    for(j=0;j<4;j++)
    {
      if(x[i][j]==0)
      n++;
    }
  }
  return n;
}  

int check()
{
  int i,j;
  int a,b;
  if(empty() == 0)
  {
    a=b=0;
    for(i=0;i<4;i++)
    {
      for(j=0;j<3;j++)
      {
        if(x[i][j]==x[i][j+1])
        a=1;
      }
    }
    for(j=0;j<4;j++)
    {
      for(i=0;i<3;i++)
      {
        if(x[i][j]==x[i+1][j])
        b=1;
      }
    }
    if(a==0 && b==0)
      return 0;
    else
      return 1;
  }
  else
    return 1;
}  

int win()
{
  int i,j;
  int a=0;
  if(check())
  {
    for(i=0;i<4;i++)
    {
      for(j=0;j<4;j++)
      {
        if(x[i][j]==2048)
        a=1;
      }
    }
  }
  return a;
} 

void add()
{
  int i,j;
  int n=0;
  if(empty() > 0)
  {
    while(n<16)
    {
      i=rand()%4;
      j=rand()%4;
      if(x[i][j] == 0)
      {
        if(rand()%100 < 80)
        {
          x[i][j]=2;
        }
        else
        {
          x[i][j]=4;
        }
        break;
      }
      n++;
    }
  }
}  

void move_up()
{
  int i,j,k;
  can_move=0;
  for(j=0;j<4;j++)
  {
    for(i=0;i<4;i++)
    {
      if(x[i][j] == 0)
      {
        for(k=i+1;k<4;k++)
        {
          if(x[k][j] != 0)
          {
            x[i][j]=x[k][j];
            x[k][j]=0;
            can_move=1;
            break;
          }
        }
      }
    } 

    for(i=0;i<3;i++)
    {
      if(x[i][j] == x[i+1][j] && x[i][j] != 0)
      {
        x[i][j] *= 2;
        x[i+1][j]=0;
        can_move=1;
        score += x[i][j];
      }
    } 

    for(i=0;i<4;i++)
    {
      if(x[i][j] == 0)
      {
        for(k=i+1;k<4;k++)
        {
          if(x[k][j] != 0)
          {
            x[i][j]=x[k][j];
            x[k][j]=0;
            break;
          }
        }
      }
    }
  }
  if(can_move == 1)
  {
    add();
  }
}  

void move_down()
{
  int i,j,k;
  can_move=0;
  for(j=0;j<4;j++)
  {
    for(i=3;i>=0;i--)
    {
      if(x[i][j] == 0)
      {
        for(k=i-1;k>=0;k--)
        {
          if(x[k][j] != 0)
          {
            x[i][j]=x[k][j];
            x[k][j]=0;
            can_move=1;
            break;
          }
        }
      }
    } 

    for(i=3;i>0;i--)
    {
      if(x[i][j] == x[i-1][j] && x[i][j] != 0)
      {
        x[i][j] *= 2;
        x[i-1][j]=0;
        can_move=1;
        score += x[i][j];
      }
    } 

    for(i=3;i>=0;i--)
    {
      if(x[i][j] == 0)
      {
        for(k=i-1;k>=0;k--)
        {
          if(x[k][j] != 0)
          {
            x[i][j]=x[k][j];
            x[k][j]=0;
            break;
          }
        }
      }
    }
  }
  if(can_move == 1)
  {
    add();
  } 

}  

void move_left()
{
  int i,j,k;
  can_move=0;
  for(i=0;i<4;i++)
  {
    for(j=0;j<4;j++)
    {
      if(x[i][j] == 0)
      {
        for(k=j+1;k<4;k++)
        {
          if(x[i][k] != 0)
          {
            x[i][j]=x[i][k];
            x[i][k]=0;
            can_move=1;
            break;
          }
        }
      }
    } 

    for(j=0;j<3;j++)
    {
      if(x[i][j] == x[i][j+1] && x[i][j] != 0)
      {
        x[i][j] *= 2;
        x[i][j+1]=0;
        can_move=1;
        score += x[i][j];
      }
    } 

    for(j=0;j<3;j++)
    {
      if(x[i][j] == 0)
      {
        for(k=j+1;k<4;k++)
        {
          if(x[i][k] != 0)
          {
            x[i][j]=x[i][k];
            x[i][k]=0;
            break;
          }
        }
      }
    }
  }
  if(can_move == 1)
  {
    add();
  }
}  

void move_right()
{
  int i,j,k;
  can_move=0;
  for(i=0;i<4;i++)
  {
    for(j=3;j>=0;j--)
    {
      if(x[i][j] == 0)
      {
        for(k=j-1;k>=0;k--)
        {
          if(x[i][k] != 0)
          {
            x[i][j]=x[i][k];
            x[i][k]=0;
            can_move=1;
            break;
          }
        }
      }
    } 

    for(j=3;j>0;j--)
    {
      if(x[i][j] == x[i][j-1] && x[i][j] != 0)
      {
        x[i][j] *= 2;
        x[i][j-1]=0;
        can_move=1;
        score += x[i][j];
      }
    } 

    for(j=3;j>=0;j--)
    {
      if(x[i][j] == 0)
      {
        for(k=j-1;k>=0;k--)
        {
          if(x[i][k] != 0)
          {
            x[i][j]=x[i][k];
            x[i][k]=0;
            break;
          }
        }
      }
    }
  }
  if(can_move == 1)
  {
    add();
  }
}  

void out()
{
  int i,j;
  system("cls");
  for(i=0;i<10;i++)
  {
    if(i==0)printf("┏━━┳━━┳━━┳━━┓\n┃  ┃  ┃  ┃  ┃\n┃");
    else if(i==8)printf("┗━━┻━━┻━━┻━━┛\n");
    else if(i==9)printf(" SCORE:%d\n",score);
    else if(i%2==0)printf("┣━━╋━━╋━━╋━━┫\n┃  ┃  ┃  ┃  ┃\n┃");
    else
    {
      for(j=0;j<4;j++)
      {
        if(x[i/2][j]!=0)printf("%4d",x[i/2][j]); else printf("  ");
        printf("┃");
      }
      printf("\n");
    }  

  }
  if(win())
  {printf("You are win!");}
  if(!check())
  {printf("Game over!");}
}  

int main()
{  

  unsigned char key;
  add();
  add();
  out();
  while(1)
  {
    key = getch();
    switch(key)
    {
      case 'w': move_up();    break;
      case 'a': move_left();   break;
      case 's': move_down();   break;
      case 'd': move_right();  break;
    }
    out();
  }
  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现2048游戏代码

    本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格)中任意一格输出数据 实现代码: #include <stdio.h> #include <stdlib.h> #include <curses.h> #include <unistd.h> #include <signal.h> #include &

  • C语言实现2048小游戏

    本文实例为大家分享了C语言实现2048小游戏的具体代码,供大家参考,具体内容如下 具有以下特点: 1.linux下完成 2.非堵塞键盘读取 3.随机生成2和4 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_O

  • 2048小游戏C语言实现代码

    本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下 大一时学c语言写的,写的不好但当时感觉还行. 环境运行 vc6.0 ,cpp文件. 基本上是c写的,但是改变字体颜色,在控制台移动光标等等好像不是c中的. 代码: #include<time.h> #include<stdlib.h> #include<conio.h> #include<stdio.h> #include<windows.h> #define x0

  • 利用C语言实现2048小游戏的方法

    准备工作 首先上一张图,因为这里只是在用C语言验证算法,所以没有对界面做很好的优化,丑是理所应当的. 了解了游戏的工作原理,实际上可以将游戏描述为四个带有方向的同一操作: 1.将所有数字向一个方向移动至中间没有空位 2.将相邻的两个相同的数字加和然后放在更靠近移动方向前部的一个位置上 另外需要判断一下玩家当前输入的内容是否可以执行,如果不可以执行等待用户下一条记录. 同时需要对游戏的进程进行控制,如果可以继续游戏,那么运行玩家继续输入下一条指令,而如果不可以进行,那么提示无法继续游戏的提示. 首

  • C语言控制台版2048小游戏

    效果不好,见谅,没事就写了一个!!! /** * @author Routh * @main.c * @date 2014, 4, 26 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> // console width #define CONSOLE_WIDTH 80 #define BOX_WIDTH 10 int BOX[4][4] = {

  • 简单实现C语言2048游戏

    本文实例为大家分享了C语言2048游戏的具体代码,供大家参考,具体内容如下 /*2048*/ #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> //全局变量 int x[4][4]={0}; int score=0; int can_move; int empty() { int i,j; int n=0; for(i=0;i<4;i++) { for(j=0

  • 用C语言完整实现2048游戏

    目录 前言 一.游戏思路 二.游戏框架 1.菜单界面 2.游戏主体 1.初始化界面: 2.随机生成初始数字 3.实现移动 4.增加新数字 5.判定胜负 6.游戏函数 三.游戏运行 四.所有代码 总结 前言 游戏规则:游戏开始,在4x4的棋盘上随机两个方块出现数字2,通过方向键控制所有方块向同一个方向移动,两个相同数字方块撞在一起之后合并成为他们的和.每次移动,棋盘上还会在一个随机位置增加一个数字2或者数字4,当最终得到一个"2048"的方块就算胜利了. 简单吧?简单--个鬼啊,我以前玩

  • C语言实现简单的控制台三子棋游戏

    用C语言实现简单的控制台三子棋游戏 首先,确定一局游戏的基本流程: 1.创建棋盘并初始化.(将棋盘看作一个二维数组) 2.打印显示出棋盘. 3.玩家落子(玩家通过输入行列坐标的方式来落子). 4.判定胜负关系.(如果玩家胜出,则退出游戏.) 5.电脑落子(随机位置落子) . 6.判定胜负关系(如果电脑胜出,退出游戏.否则,回到步骤 2 继续执行.) 第一步,此处通过构造menu()函数搭建一个简单的交互菜单和玩家交互,用来判断是否开始进行一局游戏. #define _CRT_SECURE_NO_

  • R语言写2048游戏实例讲解

    2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结束. 编程时并未查看原作者代码,不喜勿喷. 程序结构如下: R语言代码: #!/usr/bin/Rscript #画背景 draw_bg <- function(){ plot(0,0,xlim=c(0,0.8),ylim=c(0,0.8),type='n',xaxs="i", yaxs="i") for (i in

  • C语言实现简单的井字棋游戏

    本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下 1.什么是井字棋 井字棋相信大部分人都玩过 规则:双方轮流放子,当某一方的三个子连成一线(行,列,对角)时,该方获胜. 2.游戏前的准备 1. 菜单 游戏正式开始前我们可以为用户提供一个选择菜单,笔者做了一个最简单的游戏开始菜单: 代码: /*菜单*/ int menu() { printf("###########################\n"); printf("## 1.Play

  • 用C语言实现2048游戏

    本文实例为大家分享了用C语言实现2048游戏的具体代码,供大家参考,具体内容如下 我遇到的几个问题: 问题1:如何显示? system("clear");//清屏 每次发生变化就清屏一次,再把内容打印出来 问题2:怎么用键盘控制? w,s,a,d-->上下左右 system("stty -icanon");//关闭缓冲区,输入字符无需回车直接接受 问题3:随机位置? 用srand()与rand()产生随机数(x,y),再判断位置(x,y)是否为空格,不是空格就

  • 基于C语言实现2048游戏

    本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> #define ROW 4 #define COL ROW #define KEY1 224 #define KEY_LEFT 75 #define KEY_UP 72 #de

  • 基于C语言编写一个简单的抽卡小游戏

    目录 效果图展示 开始的界面 输入1 输入10 输入0 实现代码 test4.26.c 许愿.c game.h 下载 小奔最近学了C语言不少的东西,但是想用学到的东西来搞一个小游戏. 不过小奔就不做那些猜数字等小游戏了,虽然很经典,但是可以尝试一下其他比较好玩的. 小奔喜欢玩原神,但它抽卡系统的中奖概率太低了,所以就类似做一个它的抽卡系统吧,不过没有保底功能哦(小奔还不想搞,还要学习新的知识,不过以后熟练了就可能会搞一个),是全角色抽卡,只有角色没有武器的,可以十连抽,没有保底功能,抽中的概率只

  • Unity游戏开发之2048游戏的实现

    目录 一.前言 二.游戏开发知识储备 2-1技术栈 三.休闲类游戏<2048>开发实战 3-1玩法概述 3-2实现分析 3-3搭建场景 3-4实现代码 一.前言 写今天这篇文章的缘由,其实是来自于前段时间和粉丝的一个聊天,最近他打算参加游戏创作大赛,问我需要准备学习什么知识,以及参加比赛的注意事项一类: 我相信因为热爱游戏而前来投身于U3D学习的粉丝想来不是少数,兴趣可以驱动学习,在完善自己心爱游戏的过程中,要不断的去学习,不断的提高自己. 而参与游戏设计比赛,更是提高自身技术实力.增长眼界见

随机推荐