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.pswp.cn/news/531892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531892.shtml
英文地址,請注明出處:http://en.pswp.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…