c语言2048项目报告,c语言----项目_小游戏2048

2048 小游戏 主要是针对逻辑思维的一个训练.

主要学习方面:1.随机数产生的概率.2.行与列在进行移动的时候几种情况.3.messagebox的使用

#include

#include

#include

#include

using namespace std;

int board[4][4] = {0}; //二维数组

int if_need_rand; //是否生成随机数

int if_game_over; //游戏结束

void showgame() { //打印边框

system("cls"); //刷新屏幕

printf("┏━━━┳━━━┳━━━┳━━━┓\n");

for (int i = 0; i < 4; i++) {

printf("┃");

for (int j = 0; j < 4;j++) {

if (board[i][j]==0) {

printf(" ┃");

}

else {

printf("%3d┃",board[i][j]);

}

}

if (i<3) {

printf("\n┣━━━╋━━━╋━━━╋━━━┫\n");

}

else {

printf("\n┗━━━┻━━━┻━━━┻━━━┛\n");

}

}

}

//设计随机数

void addrand() {

//随机数种子

srand((unsigned)time(null));

int i, j;//行列

while (1) {

i = rand() % 4;

j = rand() % 4;

if (board[i][j]==0) {

//三目运算符,几率时2分之一

board[i][j] = (rand() % 3 ? 2 : 4);

break;

}

else {

continue;

}

}

}

//初始化

void initgame() {

if_need_rand = 1;

if_game_over = 0;

int i, j;

i = rand() % 4;

j = rand() % 4;

board[i][j] = 2;

//将数组内值,赋值为0;重新初始化

for (int i = 0; i < 4; ++i) {

for (int j = 0; j < 4; j++) {

board[i][j] = 0;

}

}

addrand();

showgame();

}

//方向分为上下左右

//左移

void moveleft() {

for (int i = 0; i < 4;i++) {

for (int j = 1, k = 0; j < 4;++j) {

//先找到k项后面第一个不为0的项

if (board[i][j]!=0) {

//分为三个情况.相等,k项是0,不等

//相等

if (board[i][k]==board[i][j]) {

board[i][k++] <<= 1; //k++先赋值给k而后k++到下一个位置,进行判断

board[i][j] = 0;

if_need_rand = 1;

}else

//k项是0

if (board[i][k]==0) {

board[i][k] = board[i][j];

board[i][j] = 0;

if_need_rand = 1;

}

//k项与j项不等,有两种情况,j项就在k项后边,

//所以不能将j项赋值为0

else {

board[i][++k] = board[i][j];

if (j!=k) {

board[i][j] = 0;

if_need_rand = 1;

}

}

}

}

}

}

//右移

void moveringht() {

for (int i = 0; i < 4; i++) {

for (int j = 2, k = 3; j >= 0; j--) {

//先找到k项后面第一个不为0的项

if (board[i][j] != 0) {

//分为三个情况.相等,k项是0,不等

//相等

if (board[i][k] == board[i][j]) {

board[i][k--] <<= 1;

board[i][j] = 0;

if_need_rand = 1;

}

else

//k项是0

if (board[i][k] == 0) {

board[i][k] = board[i][j];

board[i][j] = 0;

if_need_rand = 1;

}

//k项与j项不等,有两种情况,j项就在k项后边,

//所以不能将j项赋值为0

else {

board[i][--k] = board[i][j];

if (j != k) {

board[i][j] = 0;

if_need_rand = 1;

}

}

}

}

}

}

//上移

void moveup() {

for (int i = 0; i < 4; i++) {

for (int j = 1, k = 0; j < 4; ++j) {

//先找到k项后面第一个不为0的项

if (board[j][i] != 0) {

//分为三个情况.相等,k项是0,不等

//相等

if (board[k][i] == board[j][i]) {

board[k++][i] <<= 1;

board[j][i] = 0;

if_need_rand = 1;

}

else

//k项是0

if (board[k][i] == 0) {

board[k][i] = board[j][i];

board[j][i] = 0;

if_need_rand = 1;

}

//k项与j项不等,有两种情况,j项就在k项后边,

//所以不能将j项赋值为0

else {

board[++k][i] = board[j][i];

if (j != k) {

board[j][i] = 0;

if_need_rand = 1;

}

}

}

}

}

}

//下移

void movedown() {

for (int i = 0; i < 4; i++) {

for (int j = 2, k = 3; j >=0; --j) {

//先找到k项后面第一个不为0的项

if (board[j][i] != 0) {

//分为三个情况.相等,k项是0,不等

//相等

if (board[k][i] == board[j][i]) {

board[k--][i] <<= 1;

board[j][i] = 0;

if_need_rand = 1;

}

else

//k项是0

if (board[k][i] == 0) {

board[k][i] = board[j][i];

board[j][i] = 0;

if_need_rand = 1;

}

//k项与j项不等,有两种情况,j项就在k项后边,

//所以不能将j项赋值为0

else {

board[--k][i] = board[j][i];

if (j != k) {

board[j][i] = 0;

if_need_rand = 1;

}

}

}

}

}

}

//查看有没有空着的格子

int getnull() {

int n = 0;

for (int i = 0; i < 4; ++i) {

for (int j = 0; j < 4; ++j) {

if (board[i][j] == 0) {

n++;

}

}

}

return n;

}

//比较相邻的两个数,是否相等

void gameover() {

for (int i = 0; i < 4; ++i) {

for (int j = 0; j < 3; ++j) {

if (board[i][j] == board[i][j + 1] || board[j][i] == board[j + 1][i]) {

if_game_over = 0;

return;

}

}

}

if_game_over = 1;

}

//执行函数

void startgame() {

on:

initgame();

while (1) {

if_need_rand = 0;//首先将随机值设为0.

switch (_getch())

{

case 'a':

case 'a':

case 75:

moveleft();

break;

case 'd':

case 'd':

case 77:

moveringht();

break;

case 'w':

case 'w':

case 72:

moveup();

break;

case 's':

case 's':

case 80:

movedown();

default:

break;

}

if (if_need_rand) {

addrand();

showgame();

}

//游戏判断

if (getnull()==0) {

gameover();

if (if_game_over) {

if (messagebox(null,l"是否重来一局!",l"游戏结束",mb_yesno)==idyes) {

goto on;

}

else {

return;

}

}

}

}

}

int main() {

startgame();

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的显示初始化和特定初始化

public class Test{public static void main(String[] args){Child child new Child();} }class Parent{public Parent(){super();show();//this.show(); 因为是Child类对象调用了super()来构造其父类的部分;所以父类中的this&#xff08;随着其构造方法入栈的&#xff09;是指…

etl工程师 面试题_数据仓库工程师面试题笔试.doc

数据仓库工程师面试题姓名&#xff1a;____张小核______ 开始时间&#xff1a;_____:______ 结束时间&#xff1a;_____:_____数据库使用过哪些数据库&#xff1f;试说出它们的异同。答&#xff1a;使用过SQL SERVER和ORACLE它们的区别是&#xff1a;1.sql server 是中小型企业…

为什叫c语言,为什么c语言叫c语言?

1972年&#xff0c;美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言&#xff0c;他取了BCPL的第二个字母作为这种语言的名字&#xff0c;这就是C语言。1973年初&#xff0c;C语言的主体完成。Thompson和Ritchie用它完全重写了UNIX。随着UNIX的发展&…

java中对象的初始化过程

class Parent{int num 8;// ->3Parent(){//super(); // ->2//显示初始化 // ->3//构造代码段 // ->4show(); // ->5}{// ->4System.out.println("Parent constructor code run->");}public void show(){//被覆盖System.out.println(&quo…

马斯克翻跟头机器人_马斯克又搞事情 用VR训练机器人模仿人类动作

据该公司的开发者介绍&#xff1a;“我们已经研发了一款新算法——单次模仿学法算法。” 人们先在VR中完成一次操作&#xff0c;随后机器人通过观看视频来模仿人类的行为。为了证明该算法&#xff0c;设计者进行了堆叠彩色方块实验。人类在VR环境中按顺序移动方块。机器人首先通…

c语言通过指针变量输出10个元素,C语言程序设计第2版指针程序设计(10页)-原创力文档...

C 语言程序设计 - 理论方法与实践(第 2 版) 7.4.1 简单指针变量作函数参数 例 7-9 用比较交换法 &#xff0c;将一维数组的最 大值移到数组的最 末元素位置&#xff0c;交换 过程用上述 swap() 函数实现。 #include int main() { void swap(int *,int *); int i,a[10]{33,-12,9…

java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

/* 样例1&#xff1a;class Parent{int num 3;}class Child extends Parent{int num 4;} *//* 样例2&#xff1a; class Parent{}class Child extends Parent{int num 4; } *//* 样例3&#xff1a; class Parent{void show(){System.out.println("Parent Show!");…

gddr6速率_Rambus展示18GT/s的GDDR6内存子系统:高频信号纯净度仍然非常好

Rambus最近展示了他们最新的GDDR6内存子系统&#xff0c;把传输速率提升到了18GT/s&#xff0c;而目前的市场上的GDDR6显存多为14GT/s&#xff0c;少数为16GT/s&#xff0c;18GT/s对于Rambus和GDDR6来说都是一个新的记录。在18GT/s的传输速率下&#xff0c;单颗位宽为32-bit的G…

桶排序算法c语言10个数组,桶排序算法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//2.21 桶排序#include#include#define SIZE 100void bucket_sort(unsigned *,int);//桶排序函数的原型void print(unsigned *,int);//打印函数的原型int main(){unsigned array[SIZE];int i0;//为数组元素随机赋值for(i0;iarray[i…

diabetes影响因子2017_Journal of Diabetes

英文简介&#xff1a;Journal of Diabetes (JDB) devotes itself to diabetes research, therapeutics, and education. It aims to involve researchers and practitioners in a dialogue between East and West via all aspects of epidemiology, etiology, pathogenesis, ma…

java中泛型上限,下限应用

v 一.程序中无形之中用到的泛型import java.util.*; class Person implements Comparable<Person>{String name;int age;Person(){name "";age 0;}Person(String name, int age){this.name name;this.age age;}public String toString(){return name &quo…

株洲c语言培训机构,株洲好就业的学c语言程序设计,计算机专业地址

株洲好就业的学c语言程序设计衡阳市潇湘职业中等专业学校是由衡阳市教育主管&#xff0c;在衡阳校区的基础上设置的一所综合性全日制中等职业学校。坐落在国内优秀旅游城市、国内高新技术产业基地、名人辈出的全国历史文化名城-----衡阳市。我校依托长沙医校院&#xff0c;实现…

er图外键怎么表示_本周话题:取消考研复试最能实现相对公平?你怎么看?

2020取消研究生复试的呼声越来越高&#xff1f;考研er们&#xff1a;压力太大&#xff01;近日&#xff0c;红网作者李诗元的一篇《取消考研复试最能实现相对公平》引起热议国家线的出台和调剂系统5月20日的才开的通知让大家直接炸开了郭就山西大学来说 往年都是调剂生和一志愿…

java中匿名类的注意细节

abstract class Outer{int num;public Outer(int x){num x;}public abstract void show1();public abstract void show2(); }public class PC{public static void main(String[] args){new Outer(55)//构造父类部分//子类重写部分{public void show1(){System.out.println(num…

ios沙箱模式开启_iOS沙盒篇

iOS系统在安全性上的一大亮点就是沙盒。每个iOS应用SDK都被限制在沙盒中&#xff0c;我们可以把沙盒当成一个设置了仅当前SDK可以访问的文件夹&#xff0c;苹果对沙盒有以下几条限制&#xff1a;应用程序可以在自己的沙盒中运行&#xff0c;但不能访问任何其他应用程序的沙盒。…

c语言不定方程的二元一次,poj1061 - 同余方程,二元一次不定方程

以前不会解二元一次不定方程的时候不会做&#xff0c;现在会做了。#include #include using namespace std;typedef __int64 int64;void solveType1(int64 a, int64 b, int64 & x, int64 & y, int64 & d) {if (b 0) {x 1; y 0; d a;return;}int64 _x, _y, _d;s…

java中异常注意的细节1

/* public class Test{public static void main(String[] args){int i0;try{func();//区别就是该函数抛出的异常被封装了&#xff0c;外界不知道到底会不会发生该异常System.out.println("i " i);//所以这句话是有机会执行的}catch(Exception e){System.out.printl…

append 后如何删除_如何在STATA中合并数据文件呢?

❝作者&#xff1a;江小白邮箱&#xff1a;jieresearch163.com❞我们在使用stata进行数据分析时&#xff0c;可能涉及多个数据文档的合并操作或者同时使用不同数据集中的多个变量&#xff0c;这都需要我们进行文档间不同变量的归并。例如&#xff0c;我们需要使用CFPS(中国家庭…

linux 内网怎么安装git环境_linux 安装go环境

官网下载安装包The Go Programming Language​golang.google.cngo1.4.linux-amd64.tar.gz解压&#xff1a;tar -C /usr/local -zxvf go1.4.linux-amd64.tar.gz添加环境变量&#xff1a;export PATH$PATH:/usr/local/go/bin安装完成输入go测试安装成功&#xff0c;写个简单的代码…

java中异常注意问题(发生在多态是的异常问题)

/* 异常的注意事项&#xff1a; 1&#xff0c;子类在覆盖父类方法时&#xff0c;父类的方法如果抛出了异常&#xff0c;那么子类的方法只能抛出父类的异常或者该异常的子类。 2&#xff0c;如果父类抛出多个异常&#xff0c;那么子类只能抛出父类异常的子集。 简单说&#xff1…