C語言控制臺(tái)打磚塊小游戲
本文為大家分享了C語言控制臺(tái)小游戲,打磚塊,供大家參考,具體內(nèi)容如下
這個(gè)問題是我在領(lǐng)扣上面看到的一道困難問題,原題是這樣的:

#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ù)組,寫成這個(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ù),用于每次打過磚塊之后,檢查所有磚塊的松動(dòng)情況,過程大概是這樣的,先將全部為1的磚塊賦值為3,之后將四周與墻壁相連并且值為3的磚塊賦值為·1,然后再進(jìn)行一次全體磚塊的循環(huán)遍歷,這一次將所有與1相連接(1上下左右連接的磚塊并且值為3的)的磚塊賦值為1,這樣的操作要做四遍,為什么要做這么多遍,這個(gè)問題留給讀者體會(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語言寫控制臺(tái)程序,大一初學(xué)C語言的同學(xué)們可以看一下這個(gè)編程思想。
最后的效果是這樣的:


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 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-03
C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼
這篇文章主要介紹了C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
C語言MultiByteToWideChar和WideCharToMultiByte案例詳解
這篇文章主要介紹了C語言MultiByteToWideChar和WideCharToMultiByte案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

