简易游戏 2048 制作

  • // Matrix.h
  • #ifndef
    MATRIX_H

  • #define
    MATRIX_H
  • #include<iostream>

  • #include<time.h>

  • #include<stdlib.h>
  • #define rows
    4

  • #define cols
    4

  • #define L
    6
  • using
    std::ostream;
  • classMatrix{

  • friend
    ostream&operator<<(ostream&
    out,constMatrix& matirx);

  • // here is an output example

  • // -----------------------------

  • // | 16| 8| 4| 2|

  • // | 8  | 8| 4| 2|

  • // |     | 4| 8|
    2|

  • // |     |   |
    2| 2|

  • // -----------------------------

  • public:

  • Matrix(int
    p1,int
    p2);

  • bool
    moveLeft();// return true if
    the matrix changes

  • bool
    moveRight();// return true
    if the matrix changes

  • bool
    moveUp();// return true if
    the matrix changes

  • bool
    moveDown();// return true if
    the matrix changes

  • bool
    add(int
    p);// return true if the
    matrix changes

  • void
    update2(){// add a 2 to a random position

  • srand((unsigned)time(NULL));

  • unsignedint seed;

  • while(true){

  • int
    n = rand_r(&seed)%(rows*cols);

  • if(add(n))

  • return;

  • }

  • }
  • private:

  • int
    num[rows][cols];

  • };
  • #endif


// Matrix.cpp

                   
  1. #include<iostream>

  2. #include<queue>

  3. #include"Matrix.h"
  4. using
    std::endl;

  5. using
    std::queue;
  6. Matrix::Matrix(int p1,int
    p2){

  7. for(int r =0; r <
    rows; r++)

  8. for(int c =0; c <
    cols; c++)

  9. num[r][c]=0;

  10. num[p1/cols][p1%cols]=2;

  11. num[p2/cols][p2%cols]=2;

  12. }
  13. boolMatrix::moveLeft(){

  14. int tmp[rows][cols];

  15. for(int r =0; r <
    rows; r++)

  16. for(int c =0; c <
    cols; c++)

  17. tmp[r][c]=
    num[r][c];

  18. for(int r =0; r <
    rows; r++){

  19. queue<int> q;

  20. for(int c =0; c <
    cols; c++){

  21. if(num[r][c])

  22. q.push(num[r][c]);

  23. num[r][c]=0;

  24. }

  25. int pos =0;

  26. while(!q.empty()){

  27. int k = q.front();

  28. q.pop();

  29. if(q.empty()|| k != q.front()){

  30. num[r][pos++]= k;

  31. }else{

  32. num[r][pos++]=2*k;

  33. q.pop();

  34. }

  35. }

  36. }

  37. for(int r =0; r <
    rows; r++)

  38. for(int c =0; c <
    cols; c++)

  39. if(tmp[r][c]!=
    num[r][c])

  40. returntrue;

  41. returnfalse;

  42. }
  43. boolMatrix::moveRight(){

  44. int tmp[rows][cols];

  45. for(int r =0; r <
    rows; r++)

  46. for(int c =0; c <
    cols; c++)

  47. tmp[r][c]=
    num[r][c];

  48. for(int r =0; r <
    rows; r++){

  49. queue<int> q;

  50. for(int c = cols-1; c >=0; c--){

  51. if(num[r][c])

  52. q.push(num[r][c]);

  53. num[r][c]=0;

  54. }

  55. int pos = cols-1;

  56. while(!q.empty()){

  57. int k = q.front();

  58. q.pop();

  59. if(q.empty()|| k != q.front()){

  60. num[r][pos--]= k;

  61. }else{

  62. num[r][pos--]=2*k;

  63. q.pop();

  64. }

  65. }

  66. }

  67. for(int r =0; r <
    rows; r++)

  68. for(int c =0; c <
    cols; c++)

  69. if(tmp[r][c]!=
    num[r][c])

  70. returntrue;

  71. returnfalse;

  72. }
  73. boolMatrix::moveUp(){

  74. int tmp[rows][cols];

  75. for(int r =0; r <
    rows; r++)

  76. for(int c =0; c <
    cols; c++)

  77. tmp[r][c]=
    num[r][c];

  78. for(int c =0; c <
    cols; c++){

  79. queue<int> q;

  80. for(int r =0; r <
    rows; r++){

  81. if(num[r][c])

  82. q.push(num[r][c]);

  83. num[r][c]=0;

  84. }

  85. int pos =0;

  86. while(!q.empty()){

  87. int k = q.front();

  88. q.pop();

  89. if(q.empty()|| k != q.front()){

  90. num[pos++][c]= k;

  91. }else{

  92. num[pos++][c]=2*k;

  93. q.pop();

  94. }

  95. }

  96. }

  97. for(int r =0; r <
    rows; r++)

  98. for(int c =0; c <
    cols; c++)

  99. if(tmp[r][c]!=
    num[r][c])

  100. returntrue;

  101. returnfalse;

  102. }
  103. boolMatrix::moveDown(){

  104. int tmp[rows][cols];

  105. for(int r =0; r <
    rows; r++)

  106. for(int c =0; c <
    cols; c++)

  107. tmp[r][c]=
    num[r][c];

  108. for(int c =0; c <
    cols; c++){

  109. queue<int> q;

  110. for(int r = rows-1; r >=0; r--){

  111. if(num[r][c])

  112. q.push(num[r][c]);

  113. num[r][c]=0;

  114. }

  115. int pos = rows-1;

  116. while(!q.empty()){

  117. int k = q.front();

  118. q.pop();

  119. if(q.empty()|| k != q.front()){

  120. num[pos--][c]= k;

  121. }else{

  122. num[pos--][c]=2*k;

  123. q.pop();

  124. }

  125. }

  126. }

  127. for(int r =0; r <
    rows; r++)

  128. for(int c =0; c <
    cols; c++)

  129. if(tmp[r][c]!=
    num[r][c])

  130. returntrue;

  131. returnfalse;

  132. }
  133. boolMatrix::add(int p){

  134. int r = p/cols;

  135. int c = p%cols;

  136. if(num[r][c])

  137. returnfalse;

  138. num[r][c]=2;

  139. returntrue;

  140. }
  141. ostream&operator<<(ostream& out,constMatrix&
    matrix){

  142. for(int i =0; i <=(L+1)*cols;
    i++)

  143. out <<"-";

  144. out << endl;

  145. for(int r =0; r <
    rows; r++){

  146. out <<"|";

  147. for(int c =0; c <
    cols; c++){

  148. int k = matrix.num[r][c];

  149. out.width(L);

  150. if(k)

  151. out << matrix.num[r][c];

  152. else

  153. out <<"";

  154. out <<"|";

  155. }

  156. out << endl;

  157. }

  158. for(int i =0; i <=(L+1)*cols;
    i++)

  159. out <<"-";

  160. out << endl;
  161. return
    out;

  162. }

// client.cpp

  • #include<iostream>

  • #include<time.h>

  • #include"Matrix.h"

  • #include<curses.h>
  • using
    std::cout;

  • using
    std::cin;

  • int main(){

  • Matrix m(0,13);

  • cout << m;
  • char c;

  • while(cin >>
    c){

  • bool flag
    =false;

  • switch(c){// a, d, w, s stand for left, right, up and down

  • case‘a‘:

  • flag = m.moveLeft();

  • break;

  • case‘d‘:

  • flag = m.moveRight();

  • break;

  • case‘w‘:

  • flag = m.moveUp();

  • break;

  • case‘s‘:

  • flag = m.moveDown();

  • break;

  • default:

  • break;

  • }

  • if(flag)// if the
    matrix changes, add a 2 to the matrix

  • m.update2();

  • // system("Cls");

  • cout << m;

  • }

  • return0;

  • }

           

简易游戏 2048 制作

时间: 2024-11-05 02:19:26

简易游戏 2048 制作的相关文章

详解matlab之简易2048制作

详解matlab之简易2048制作 详解matlab之简易2048制作 一制作之前 1关于初始化 2运行时出现2的位置问题 3移动方向问题 4关于数字合并 5关于游戏怎么结束 6其他还有什么就看着需要办吧 二实现过程 1关于空位置补充一个2 2关于移动后的操作 三关于具体某个方向的操作 1上操作 2下操作 3左操作 4右操作 四命令窗口模拟显示 五关于matlab的GUI实现 一):制作之前 小游戏2048出来也算很久了,基本上大家都知道,通俗易懂,玩法也很简单,前几天兴趣来了,通过matlab

【Qt点滴】游戏2048

看到了挺火的2048,就想用Qt实现一下,游戏逻辑倒是不复杂,稍微推敲就能搞定,倒是动画和各种细节前前后后参考了很多,也想了很久. 一个月前把功能都实现了,因为考试等各种琐事,这几天才想到整理下.真正编写的时间也并不久,一周左右吧. 这次是用Qt5开发,一个QWidget窗口,添加一个restart按钮,一个最高分label,一个当前分label.然后16宫格的游戏面板部分继承自QGLWidget类,面板监听鼠标按下和放开坐标来识别四个方向的移动. 逻辑部分不复杂,每次计算更新当前面板的分数后,

游戏2048源代码 - C语言控制台界面版

完整源代码如下,敬请读者批评指正: 1 /* 2 * Copyright (C) Judge Young 3 * E-mail: [email protected] 4 * Version: 1.0 5 */ 6 7 #include <stdio.h> 8 #include <time.h> /* 包含设定随机数种子所需要的time()函数 */ 9 #include <conio.h> /* 包含Windows平台上完成输入字符不带回显和回车确认的getch()函数

Android 带你玩转实现游戏2048 其实2048只是个普通的控件

1.概述 博主本想踏入游戏开放行业,无奈水太深,不会游泳:于是乎,只能继续开发应用,但是 原生Android也能开发游戏么,2048.像素鸟.别踩什么来着:今天给大家带来一篇2048的开发篇,别怕不分上下文,或者1.2.3.4,一篇包 你能玩happy~虽然我从来没有玩到过2048!!!其实大家也可以当作自定义控件来看~~~ 特别说明一下,游戏2048里面的方块各种颜色来源于:http://download.csdn.net/detail/qq1121674367/7155467,这个2048的

[小游戏]2048

益智小游戏2048    玩法:    该游戏使用方向键让方块上下左右移动.如果两个带有相同数字的方块在移动中碰撞,则它们会合并为一个方块,且所带数字变为两者之和.每次移动时,会有一个值为2或者4的新方块出现.    可能不好理解,你玩几下就知道了.    这款游戏玩起来会让你”根本停不下来“,很有意思的.通关截图: 游戏官网:http://gabrielecirulli.github.io/2048/ date:2014-10-26

Android 带你玩转实现游戏2048 其实2048只是个普通的控件(转)

1.概述 博主本想踏入游戏开放行业,无奈水太深,不会游泳:于是乎,只能继续开发应用,但是原生Android也能开发游戏么,2048.像素鸟.别踩什么来着:今天给大家带来一篇2048的开发篇,别怕不分上下文,或者1.2.3.4,一篇包你能玩happy~虽然我从来没有玩到过2048!!!其实大家也可以当作自定义控件来看~~~ 特别说明一下,游戏2048里面的方块各种颜色来源于:http://download.csdn.net/detail/qq1121674367/7155467,这个2048的代码

Andorid游戏2048开发(一)

最近有一款Android平台下的游戏很是火爆----2048.下面记录一下开发过程.由于笔者是Android开发的初学者,所以希望借以此文熟悉整个Android开发的流程. 首先创建Game2048的游戏项目.我们选择最低平台为Android4.0(API 14),最高支持平台Android4.4(API 19),然后一路Next,创建完成之后,我们修改activity_main.xml文件.修改默认的布局方式为LinearLayout布局方式.然后我们在嵌套一个Linearyout布局,用户游

180行ruby代码搞定游戏2048

最今在玩2048这款小游戏,游戏逻辑简单,非常适合我这种对于游戏新入行的人来实现逻辑.于是选择了最拿手的ruby语言来实现这款小游戏的主要逻辑.还是挺简单的,加起来4小时左右搞定. 上代码: require 'optparse' module Help HELP_TEXT =<<HELP press buttons for move l => move to left r => move to right t => move to top b => move to bo

C++.NET的简易计算器的制作

计算器的制作需要实现一下几个功能:加减乘除,连续计算,重复计算. 加减乘除就是简单的二元运算,连续计算就是不使用等号连续进行几次二元运算,重复计算就是进行一次二元运算之后再次单击等号可以将之前的运算再次进行一次. 由于是C++的窗体程序,所以先设计出窗体的界面.界面如下. 需要注意的是,上面的两个显示框用的是TextBox,其余的均是Button. 窗体的FormBorderStyle属性应改成FixedSingle或其他,不能用None,这个样子计算器窗体框的大小就是固定不可变的. Maxim