Press "Enter" to skip to content

Category: 啊哈C语言

推箱子游戏

使用C来实现一个简单的推箱子游戏..

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main(){
    char a[50][50]={
    "   ###     ",
    "   #*#     ",
    "   # #     ",
    "####O######",
    "#*  OS O *#",
    "#####O#####",
    "    # #    ",
    "    #*#    ",
    "    ###    ",
    };

    int i,f=0; //控制变量 
    int x=4,y=5; //控制点坐标 

    char ch; //定义控制输入端

    //打印输出地图
    for(i=0;i<12;i++){
        puts(a[i]);
    }
    puts("游戏尚未开始,请按键……");

    //f标记值0.1.2.3共计4次循环 
    while(f<4)//开始循环
    {
        ch=getch();

        if(ch=='s') //按下s键
        { 
            if(a[x+1][y]!='#'&&a[x+1][y]!='@')//未碰墙未达目的地 
            {
                if(a[x+1][y]!='O') //前面没有O的时候 
                {
                    a[x][y]=' ';    //现坐标为空 
                    x++;            //x坐标向下移动一位 
                    a[x][y]='S';    //新坐标标记为S 
                }
                else    //前面有O标记时 
                {
                    if(a[x+2][y]!='#')  //前面两坐标有墙 
                    {
                        if(a[x+2][y]!='*')  //O前面没有目的地时 
                        {
                            a[x][y]=' ';    //现坐标为空     
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='O';  //前面一个坐标为O 
                        }
                        else    //O前面有目的地坐标时 
                        {
                            a[x][y]=' ';    //现坐标为空 
                            x++;            //x坐标向下移动 
                            a[x][y]='S';    //新坐标标记为S 
                            a[x+1][y]='@';  //目的地坐标改为@ 
                            f=f+1;          //f标记值增加1 
                        }
                    }
                }
            }
        }

        if(ch=='w') //按下w键
        { 
            if(a[x-1][y]!='#'&&a[x-1][y]!='@')
            {
                if(a[x-1][y]!='O') 
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x-2][y]!='#')
                    {
                        if(a[x-2][y]!='*')
                        {
                            a[x][y]=' ';                            
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            x--;
                            a[x][y]='S';
                            a[x-1][y]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='d') //按下d键
        { 
            if(a[x][y+1]!='#'&&a[x][y+1]!='@')
            {
                if(a[x][y+1]!='O') 
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y+2]!='#')
                    {
                        if(a[x][y+2]!='*')
                        {
                            a[x][y]=' ';                            
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y++;
                            a[x][y]='S';
                            a[x][y+1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

        if(ch=='a') //按下a键
        { 
            if(a[x][y-1]!='#'&&a[x][y-1]!='@')
            {
                if(a[x][y-1]!='O') 
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='S';
                }
                else
                {
                    if(a[x][y-2]!='#')
                    {
                        if(a[x][y-2]!='*')
                        {
                            a[x][y]=' ';                            
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='O';
                        }
                        else
                        {
                            a[x][y]=' ';
                            y--;
                            a[x][y]='S';
                            a[x][y-1]='@';
                            f=f+1;
                        }
                    }
                }
            }
        }

    system("cls"); //清屏
    for(i=0;i<12;i++)
        {
        //输出变量变更之后的地图 
        puts(a[i]);
        }
    printf("\n已达成:%d 颗星。",f);
    }


    Sleep(500);  
    system("cls"); //清屏
    puts("恭喜,你赢了!");
    return 0;
} 

用for打印菱形

啊哈C语言!逻辑的挑战

用for打印菱形

#include <stdio.h>
int main()
{
   int i,j,k;
//上五层
   for(i=1;i<=5;i++){
      for(j=1;j<=5-i;j++){
          printf(" ");
            }
      for(k=1;k<=2*i-1;k++){
          printf("*");
            }
      printf("\n");
      }
//下四层 
   for(i=1;i<=4;i++){
      for(j=1;j<=i;j++){ 
          printf(" ");
          } 
      for(k=1;k<=9-2*i;k++){ 
          printf("*");
          } 
      printf("\n");
      }
}

多个整数排序

啊哈C语言!逻辑的挑战

P159.输入n个数,并将这n个数按照从小到大的顺序输出。

#include<stdio.h>
#include<stdlib.h>
int main(){
    //命名变量 
    int i,j,t,n;
    //输入比较数字的个数 
    scanf("%d",&n);
    //设定需要多少个数组 
    int a[n];
    //输入用于比较的数字 
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    //比较数字 
    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
            if(a[i]>a[j]){
                t = a[i];a[i]=a[j];a[j]=t;
            }
        }
    }
    //输出从小到大的n位数数字 
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    return 0;
} 

tips:
真讨厌这本书的作者的代码风格,单行的for循环不写{}直接用tab代替。

使用C生成随机数

啊哈C语言!逻辑的挑战

P142.如何随机生成一个1~20 000 000的随机数

#include<stdio.h>
#include<time.h>
int main(){
    int a,b,c;
    srand((unsigned)time(NULL));
    a = rand()/10;
    b = rand()/10;
    c = a * b;
    printf("%d",c);
    return 0;
} 

使用time函数生成的随机数范围是1~32767,那么32767整除10,再平方的结果就是10 732 176,在题目要求范围之内。