C語(yǔ)言控制臺(tái)打磚塊小游戲
本文為大家分享了C語(yǔ)言控制臺(tái)小游戲,打磚塊,供大家參考,具體內(nèi)容如下
這個(gè)問(wèn)題是我在領(lǐng)扣上面看到的一道困難問(wèn)題,原題是這樣的:
#include "stdafx.h" #include<stdio.h> int a[10][10] = { { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },? ?? ??? ??? ??? ? ?{ 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 1, 1, 0, 1, 1, 0 }, ?? ??? ??? ??? ? ?{ 0, 1, 1, 1, 1, 1, 0, 0, 1, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, ?? ??? ??? ??? ? ?{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } };//初始化二維數(shù)組,寫(xiě)成這個(gè)形狀便于一目了然 void down(int a[10][10])//負(fù)責(zé)控制磚塊下落的函數(shù),使被賦值為3的磚塊下落,下落到下界或值為1的方塊之上 { ?? ?int i, j; ?? ?int m, n; ?? ?for (i = 9; i >=0; i--) ?? ?for (j = 0; j < 10; j++) ?? ?if (a[i][j] == 3) ?? ?{ ?? ??? ?m = i; ?? ??? ?n = j; ?? ??? ?while (a[m + 1][n] != 1&&m!=9) ?? ??? ?{ ?? ??? ??? ?a[m + 1][n] = 1; ?? ??? ??? ?a[m][n] = 0; ?? ??? ??? ?m++; ?? ??? ?} ?? ?} } void freshen(int a[10][10])//刷新函數(shù),用于每次打過(guò)磚塊之后,檢查所有磚塊的松動(dòng)情況,過(guò)程大概是這樣的,先將全部為1的磚塊賦值為3,之后將四周與墻壁相連并且值為3的磚塊賦值為·1,然后再進(jìn)行一次全體磚塊的循環(huán)遍歷,這一次將所有與1相連接(1上下左右連接的磚塊并且值為3的)的磚塊賦值為1,這樣的操作要做四遍,為什么要做這么多遍,這個(gè)問(wèn)題留給讀者體會(huì)。 { ?? ?int i, j; ?? ?for ( i = 0; i < 10; i++) ?? ?for ( j = 0; j < 10; j++) ?? ??? ?if (a[i][j]==1) ?? ??? ??? ?a[i][j] = 3; ?? ??? ?for (i = 0; i < 10; i++) ?? ??? ?{ ?? ??? ??? ?j = 0; ?? ??? ??? ?while (a[i][j] != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?a[i][j] = 1; ?? ??? ??? ??? ?j++; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for (i = 0; i < 10; i++) ?? ??? ?{ ?? ??? ??? ?j = 9; ?? ??? ??? ?while (a[i][j] != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?a[i][j] = 1; ?? ??? ??? ??? ?j--; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for (j = 0; j < 10; j++) ?? ??? ?{ ?? ??? ??? ?i = 0; ?? ??? ??? ?while (a[i][j] != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?a[i][j] = 1; ?? ??? ??? ??? ?i++; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for (j = 0; j < 10; j++) ?? ??? ?{ ?? ??? ??? ?i = 9; ?? ??? ??? ?while (a[i][j] != 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?a[i][j] = 1; ?? ??? ??? ??? ?i--; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?for (i = 0; i < 10; i++) ?? ??? ?for (j = 0; j < 10; j++) ?? ??? ?if (a[i][j] == 1) ?? ??? ?{ ?? ??? ??? ?if (a[i - 1][j] == 3) ?? ??? ??? ??? ?a[i - 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i + 1][j] == 3) ?? ??? ??? ??? ?a[i + 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i ][j-1] == 3) ?? ??? ??? ??? ?a[i ][j-1] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i ][j+1] == 3) ?? ??? ??? ??? ?a[i ][j+1] = 1; ?? ??? ?} ?? ??? ?for (i = 9; i >=0; i--) ?? ??? ?for (j = 9; j >=0; j--) ?? ??? ?if (a[i][j] == 1) ?? ??? ?{ ?? ??? ??? ?if (a[i - 1][j] == 3) ?? ??? ??? ??? ?a[i - 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i + 1][j] == 3) ?? ??? ??? ??? ?a[i + 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j - 1] == 3) ?? ??? ??? ??? ?a[i][j - 1] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j + 1] == 3) ?? ??? ??? ??? ?a[i][j + 1] = 1; ?? ??? ?} ?? ??? ?for (i = 9; i >= 0; i--) ?? ??? ?for (j = 9; j >= 0; j--) ?? ??? ?if (a[i][j] == 1) ?? ??? ?{ ?? ??? ??? ?if (a[i - 1][j] == 3) ?? ??? ??? ??? ?a[i - 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i + 1][j] == 3) ?? ??? ??? ??? ?a[i + 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j - 1] == 3) ?? ??? ??? ??? ?a[i][j - 1] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j + 1] == 3) ?? ??? ??? ??? ?a[i][j + 1] = 1; ?? ??? ?} ?? ??? ?for (i = 9; i >= 0; i--) ?? ??? ?for (j = 9; j >= 0; j--) ?? ??? ?if (a[i][j] == 1) ?? ??? ?{ ?? ??? ??? ?if (a[i - 1][j] == 3) ?? ??? ??? ??? ?a[i - 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i + 1][j] == 3) ?? ??? ??? ??? ?a[i + 1][j] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j - 1] == 3) ?? ??? ??? ??? ?a[i][j - 1] = 1; ?? ??? ??? ?else ?? ??? ??? ?if (a[i][j + 1] == 3) ?? ??? ??? ??? ?a[i][j + 1] = 1; ?? ??? ?} } void view(int a[10][10])//打印磚塊函數(shù) { ?? ?for (int i = -1; i < 10; i++) ?? ?{ ?? ??? ?printf("0%d ", i); ?? ?} ?? ?printf("\n"); ?? ?for (int i = 0; i < 10; i++) ?? ?{ ?? ??? ?printf("%d: ?", i); ?? ??? ?for (int j = 0; j < 10; j++) ?? ??? ?{ ?? ??? ??? ?if (a[i][j] == 1) ?? ??? ??? ??? ?printf("* ?"); ?? ??? ??? ?else ?? ??? ??? ??? ?printf(" ? "); ?? ??? ?} ?? ??? ?printf("\n"); ?? ?} } void beat(int a[10][10],int i,int j)//打磚塊函數(shù) { ?? ?a[i][j] = 0; } void main() { ?? ?int p,q; ?? ?view(a); ?? ?for (int w = 0; w < 18; w++) ?? ?{ ?? ??? ?printf("beat whichp?\n"); ?? ??? ?scanf("%d", &p); ?? ??? ?printf("beat whichq?\n"); ?? ??? ?scanf("%d", &q); ?? ??? ?beat(a, p, q); ?? ??? ?freshen(a); ?? ??? ?down(a); ?? ??? ?view(a); ?? ?} ?? ?getchar(); ?? ?return; }
我用到的編譯器是VS2013,C語(yǔ)言寫(xiě)控制臺(tái)程序,大一初學(xué)C語(yǔ)言的同學(xué)們可以看一下這個(gè)編程思想。
最后的效果是這樣的:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言中形參和實(shí)參詳解及實(shí)例代碼
這篇文章主要介紹了C語(yǔ)言中形參和實(shí)參詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05C++ boost::asio編程-異步TCP詳解及實(shí)例代碼
這篇文章主要介紹了C++ boost::asio編程-異步TCP詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-11-11詳解C++設(shè)計(jì)模式編程中策略模式的優(yōu)缺點(diǎn)及實(shí)現(xiàn)
這篇文章主要介紹了C++設(shè)計(jì)模式編程中策略模式的優(yōu)缺點(diǎn)及實(shí)現(xiàn),文中討論了策略模式中設(shè)計(jì)抽象接口的繼承和組合之間的區(qū)別,需要的朋友可以參考下2016-03-03C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼
這篇文章主要介紹了C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03C語(yǔ)言MultiByteToWideChar和WideCharToMultiByte案例詳解
這篇文章主要介紹了C語(yǔ)言MultiByteToWideChar和WideCharToMultiByte案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08