精华内容
下载资源
问答
  • 关于入门C语言编写简易程序的一些思路 ​ 你好,点开这篇文章的朋友。不管你是抱着怎样的目的来学习C语言,我们首先都要明白一件事:你是一个以键盘作为施工工具的程序工地工人,千万不要在施工过程中忘记带上“安全...

    关于入门C语言编写简易程序的一些思路

    ​ 你好,点开这篇文章的朋友。不管你是抱着怎样的目的来学习C语言,我们首先都要明白一件事:你是一个以键盘作为施工工具的程序工地工人,千万不要在施工过程中忘记带上“安全帽”——也就是说,你活跃的大脑与正确的逻辑。
    ​ 虽然以下的内容可能不会涉及到强制亲自尝试的要求(但是强烈建议直接上手尝试),你可以不用带上键盘,但仍要记住安全第一,所以请带好你的安全帽。

    施工前的一些准备

    获取信息

    ​ 在施工之前你会得到一份关于工程内容的文件(或者说是题目),你要做的就是理清楚这些你能够读懂的文字所表达出来的要求:我们要做怎么样的一个任务?

    ​ 在脑中或者纸上罗列出这些要求并确保你在之后的步骤中不会忘记后,我们要开始整理这些信息。虽然我们在这里讨论的是“简易程序”,但在这里我所说的“简易程序”也具有一定的层次,所以我们可以从简单的程序任务中慢慢引渡到复杂的任务,不过这不是这篇文章所要详细讲述的。

    处理信息

    ​ 现在这份信息已经躺在砧板上,你需要将它进行分层区块化处理。让我们来看一个例题:

    入秋了,家里的用电量也减少了许多。阿福收到了新一期的电费通知单,却发现本期电费与高温天的电费不相上下。城市现行的阶梯电价是按照年用电量来划分的,这说明阿福家的低价电额度已用完,接下来可得节约用电咯。阿福想自己验证一下,今年以来代扣的总电费到底是否正确。请编写一个程序,已知今年1月份以来的各月用电量,根据电价规定,计算出今年应缴的总电费是多少。

    城市现行的阶梯电价标准分三档:

    第一档:电量为年用电量2760度及以下部分,电价不作调整,标准电价为0.538元/度;

    第二档:电量为年用电量2761至4800度的部分,电价在第一档基础上加价0.05元,为0.588元/度;

    第三档:电量超过4800的部分,电价在第一档基础上加价0.3元,为0.838元/度。

    输入占一行,给出若干个整数(以-1结束),分别表示从1月开始各个月份的用电量(单位是度)。
    输出总电费(单位是元),结果保留1位小数。

    ​ 相信你已经仔细阅读过以上的题目内容并获取了一定的信息,我们先来确认——这是一个怎样的任务?

    ​ ——这是一个让我们计算(这几个月来)电费的任务。

    ​ 当然,这一点已经清楚地写在题目上了。但无论如何仍然要记住我们原本的目的,以免发生把平房建成公交车站的事故。

    第二,理清为了实现这个目的我们要做些什么。 先停下来思考一下,为了通过代码实现以上的内容,我们应该怎么做?你的脑中应该浮现出大概的想法与代码雏形(可能会伴随着“我知道该怎么做但是就是想不出代码!”的烦恼,关于这一点,我真诚地建议你再回去熟悉一下基础的算法)

    ​ 那么接下来我们就来讨论在这里,为了实现计算电费这个目的我们的初步想法。

    ​ 首先我们应该计算出总电量为多少,然后进行电费计算。

    ​ 从总电量说起:我们该如何获得这个总电量?数据相加很简单,但获取数据则需要你用一用你机灵的小脑袋——我们可以通过循环语句来获得并相加得到总电量。

    ​ 再说电费计算——如你所见,电费的收取是分档次的。你应当考虑到总电量的档位并非固定,那么就要根据总电量的数值来进行选择计算(顺带一提,这种时候最好注意一下数据单位是否要转换)

    上手干活

    ​ 现在你已经大概知道你要做些什么了,所以让我们来上手操作(你也可以看我操作,但建议你先用自己的想法写下代码)。

    #include<stdio.h>
    int main()
    {
        int x,sum;
        double m;
        
        return 0;
    }
    

    接下来我们面对的第一个问题是:如何写循环。

    你可以使用while(do…while)或者for语句,没有人会扼制你非要用哪种语言,不过这里我们以while语言为例进行讨论

    ​ 确认了使用哪种循环结构后,我们要考虑的关键点就是进行循环的条件。对大多数人来说都会直接想到以输入的“-1”为契机进行条件判写,但也不乏一些人掰手指数一数一共需要输入的有几个数据,然后写下循环xx次。当然,第二种方法也是可行的,但有很大的局限性,也是这篇文章重点要提醒大家的:编写代码程序的时候需要注意兼顾各种情况,所以尽可能选择灵活、容错率高的代码算法。

    ​ 在这题里我们的确可以数一共需要输入几个数据,但万一他只要求你计算上半年呢?或者题目未说明的隐性条件中有不规定固定输入月份数这一条呢?在这种情况下,第二种方法思路就会出现很大的局限性。数据在变,而你的代码跟不上数据变化的速度,就会导致错误的产生。

    于是继续编写我们的代码:

    #include<stdio.h>
    int main()
    {
        int x,sum;
        double m;
        scanf("%d",&x);
        while (x!=-1){
         {
            sum=sum+x;
            scanf("%d",&x);
          }
            
         return 0;
    }
    

    现在我们顺利地完成了获得总电量的循环部分,我们进行下一步选择结构的编写

    在这里选择结构并没有多少思维上的难点,我们根据题目的要求就可以写出我们需要的代码:

    #include<stdio.h>
    int main()
    {
        int x,sum;
        double m;
        scanf("%d",&x);
        while (x!=-1){
         {
            sum=sum+x;
            scanf("%d",&x);
          }
        if(sum<=2760){
            m=0.538*sum;
        }
        else if(sum>2760&&sum<=4800){
            m=2760*0.538+(sum-2760)*0.588;
         }
        else {
            m=2760*0.538+2040*0.588+(sum-4800)*0.838;
         }
     }
        printf("%.1lf",m);
        return 0;   
    }
    

    现在我们成功地得到了完成品代码,我们可以对他进行调试测试来看看有什么小错误(当然这里的代码已经测试过了)

    你成功的完成了这个简单的小任务,但是你要记住在完成这个小任务时思维走向的感觉,以便于你在接手复杂的任务时不会手忙脚乱不知道该从哪里开始下手。

    ​ 感谢你阅读到这里。

    展开全文
  • C语言编写的五子棋游戏 设计思路

    万次阅读 多人点赞 2010-12-31 10:04:00
    但还是很有成就感的,一下是我的感悟用C语言编写的五子棋游戏这个五子棋游戏是站长刚学C语言两个月时所写!!C语言制作五子棋五子棋游戏是一个深受人们喜爱的游戏,通常是人机对弈,本程序设计为人与人对弈,一方执...

    现在已经大2了 ,学校的实训课要我们编写一个五子棋游戏 ,虽然过程艰辛。但还是很有成就感的,一下是我的感悟

    用C语言编写的五子棋游戏
    这个五子棋游戏是站长刚学C语言两个月时所写!!

    C语言制作五子棋


    五子棋游戏是一个深受人们喜爱的游戏,通常是人机对弈,本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连。按键盘上的方向键可以移动光标,回车键可以摆放棋子。

    一、 设计目的
    这个程序是对编程基本功的一个训练,将分支、循环、数组、函数综合应用,而不仅限于编制独立的小程序,通过游戏过程增加编程的兴趣,提高编程水平。编制该程序我对以下的知识点进行的巩固和掌握:1.数组元素为结构体的数组应用。2.全局变量应用。3.按键的处理。4.数组元素与蛇、食物的对应关系。5.图形方式等等。虽然该程序是一个普通而又简单的程序,但是对于一C语言初级阶段的学生来说,是一个很好的锻炼甚至可以说是一个很好的提高。

    二、 设计思路
    棋盘设计为19×19格,初始状态光标在棋盘的中央,白棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。当游戏一方胜利后显示胜利信息,提示信息利用汉字点阵输出。
    从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋。这样程序的主要工作是接收棋手按键操作,棋手1用Up、Down、Left、Right控制光标移动,回车键表示落子。棋手2用W、S、A、D控制光标移动,空格键表示落子。一旦接收到回车键或空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子。落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。如果想退出游戏,可以按Esc键。

    三、程序设计

    1.定义全局变量int gamespeed=5000;

    int i,j,key;

    struct Sor

    {

    int x;

    int y;/*x,y表示当前光标的位置*/

    int yes[N][N];/* 0表示无棋子,1表示白色棋子,2表示黑色棋子*/

    int kao;/* 1表示白棋准备落子,2表示黑棋落子*/

    int ok;/*1表示白棋胜出,2表示黑棋胜出*/

    }sor;
    复制代码

    2.Main()主函数
    按照语法规则,首先定义使用到的常数、全局变量、函数原型说明。棋盘状态用数组yes[20][20],初值为0,表示空格。函数的实体比较简单,调用图形驱动、画棋盘、人人对弈等自定义函数,一旦游戏结束后,关闭图形驱动,程序结束。

    3.drawqp()画棋盘函数
    背景颜色设为黑色,从坐标(100,100)开始每隔20个单位用绿色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。画线函数line()的参数为线的起点和终点坐标,注意要计算正确。函数setfillstyle()可以设置填充模式和填充颜色,fillellipse(int x,int xradius,int yradius)以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。

    4.win()判断是否胜出函数
    本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息(如:红方获胜),否则继续落子。

    5.Gameplay()双人对战函数
    这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:
    (1) 按Esc键程序可以随时结束。
    (2) 按上下左右光标键,则改变棋子移动的坐标值。
    (3) 按回车键后判断:
    1) 如落子的位置已经有棋则无效,继续按键。
    2) 如落子位置是空格,可以将棋子落入格内,调用win()函数。
    3) 如果棋子变化后,棋盘已下满了棋子,则游戏结束。显示平局信息。
    (4) 重复上述步骤,直到游戏结束。

    6.Xandy()显示光标纵横坐标函数
    该函数的作用是在每次移动光标后,在屏幕左下角显示出光标的纵横坐标。

    7.图形功能函数
    以下函数原形都在graphics.h中。
    (1)registerbgidriver():
    (2)initgraph(int *driver, int *mode, char *path):用于初始化图形系统,并装入相应的图形驱动器。该函数把由driver所指向的图形驱动器代码装入内存。如果图形驱动器未装入内存,图形函数将不能操作。图形函数所用的屏显模式由mode所指向的整数值确定。最后,图形驱动器的路径是由path所指向的字符串给出。如果没有指定路径,就在当前工作路径上寻找。
    (3)rectangle(int left,int top,int right,int bottom):函数rectangle()用当前画出由坐标left,top及right,bottom所定义的矩形。
    (4)setcolor(int color):把当前画线颜色设置为color所指定的颜色。每个图形显示卡的有效颜色由setpalette()提供。
    (5)closegraph():该函数使图形状态失效,并且释放用于保存图形驱动器和字体的系统内存。当你的程序既用到图形输出又用到非图形输出时,应该用此函数。该函数还把系统屏显模式返回到调用initgragh()前的状态。
    通过编制该程序我对以下的知识点进行的巩固和掌握:
    1.数组元素为结构体的数组应用。
    2.全局变量应用。3.按键的处理。4.图形方式等等。虽然该程序是一个普通而又简单的程序,但是对于一C语言初级阶段的学生来说,是一个很好的锻炼甚至可以说是一个很好的提高。由于个人能力的限制该程序还有许多的缺陷,若要进一步的完善还需要对C语言更深一步的学习。

    程序运行部分截图:
     
     

    展开全文
  • 贪吃蛇小游戏——C语言编写

    千次阅读 多人点赞 2021-03-07 19:07:51
    设计思路2.1图案显示2.2蛇头的移动2.3食物的生成2.4蛇身体的生成与移动2.5判断是否撞墙和打印得分3.完整代码 1.效果展示 2.设计思路 2.1图案显示 利用二维数组构建图案,总共有墙壁,蛇头,蛇身,食物,空白五种...

    1.效果展示

    在这里插入图片描述

    2.设计思路

    2.1图案显示

    利用二维数组构建图案,总共有墙壁,蛇头,蛇身,食物,空白五种元素,因此只需要二维数组中的元素有五种不同的值即可;
    在这里插入图片描述

    在这里插入图片描述

    2.2蛇头的移动

    贪吃蛇是会自动移动的,我们首先让蛇头能自动移动。由于我们用数组来表示元素在地图中的位置,让元素移动就是让元素的坐标改变。
    因此我们需要构建函数来完成蛇头坐标的自动移动,同时需要对我们输入的方向键做出判断,改变移动的方向。
    在这里插入图片描述

    2.3食物的生成

    食物的生成很简单,只要种下一个随机数种子,然后给一个变量用来判断是否生成食物即可,需要注意的是食物的坐标别越界
    在这里插入图片描述

    2.4蛇身体的生成与移动

    蛇身体的计算:
    首先,蛇身体的移动前必须产生身体即是否吃到食物,可以给一个变量当计数器来判断有多少截身体;

    蛇身体坐标的保存:
    我们需要一个结构体数组,结构体数组的每个元素有两个成员x和y值,这两个值就代表我们的身体在二维数组中的坐标,
    即一个数组成员就代表一截身体;

    蛇身体坐标的获得:
    通过计数器来判断是否有身体,当计数器不为0时,蛇就有了身体,第一截身体的坐标来源就是蛇头吃到食物前的坐标;
    同理,后面吃到的食物增加,计数器的数值变大,就代表我们的结构体数组有多少个有效元素,然后给结构体数组里面的成员进行赋值;
    最后一截身体的数组下标=计数器-1,后面的身体坐标就是前面的身体移动前的坐标,由于我们的头是不断移动的,并且可以直接获得其坐标,所以从最后一截身体开始往前进行拷贝赋值;
    由于我们的赋值特点,数组(蛇身)从后往前进行覆盖式拷贝赋值,即完成了蛇身体的移动

    没有吃到食物时的细节:
    没有吃到食物时,蛇的身体长度是不变的,我们的身体坐标进行改变之后,在二维数组中留下了一个隐患;
    在这里插入图片描述
    在这里插入图片描述

    2.5判断是否撞墙和打印得分

    打印得分:得分即身体的长度即计数器的数值

    判断是否撞墙:判断蛇头的下一个位置在二维数组中是不是1即是不是墙壁即可
    在这里插入图片描述

    3.完整代码

    #ifndef _SNAKE_H_
    #define _SNAKE_H_
    
    #include <stdio.h>
    #include <windows.h>
    #include <time.h>
    #include <stdlib.h>
    #include <conio.h>
    
    
    #define MAX 500 //蛇身个数
    #define ROW 20  
    #define LINE 20
    
    typedef struct Body
    {
    	int x;
    	int y;
    }body;
    
    void MapPrint(char arr[][LINE], int count);//地图打印
    
    void Move(int *row, int *line, char *move);//蛇头移动函数,通过读取输入的键盘方向键来改变蛇头方向
    
    void GetCoordinate(int *row, int *line, char *move);//蛇头自动移动,通过获取的方向信息,决定蛇头往哪个方向自动移
    
    void food(char arr[][LINE], int *x, int *y);//随机生成一个食物
    
    void JudgeFood(int food_x, int food_y, int row, int line, int *count);//判断是否吃到食物
    
    void GetBody(char arr[][LINE], body body[], int count, int temp_x, int temp_y);//蛇体坐标更新
    
    int  Judge(char arr[][LINE], int row, int line);//判断是否撞墙
    
    void Game();
    
    
    #endif
    
    #include "snake.h"
    
    void gotoxy(int x, int y)//将光标移动到(x,y)位置
    {
    	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    	COORD pos;
    	pos.X = x;
    	pos.Y = y;
    	SetConsoleCursorPosition(handle, pos);
    
    
    }
    
    void MapPrint(char arr[][LINE],int count)
    {	
    	gotoxy(0, 0);
    	for (int i = 0; i < ROW; i++)
    	{
    		for (int j = 0; j < LINE; j++)
    		{
    			//第一行,最后一行,第一列,最后一列都是墙壁
    			if (arr[i][j]==1)
    				printf("■");
    
    			else if (arr[i][j] == 2)
    				printf("⊙");//蛇头
    
    			else if (arr[i][j] == 3)
    				printf("¤");//打印食物¤
    
    			else if (arr[i][j] == 4)
    				printf("●");//打印身体●
    
    			else
    				printf("  ");//一个墙体占两个空格
    		}
    		printf("\n");
    	}
    	printf("				\n");
    	printf("             当前得分:%d\n", count);
    	printf("				\n");
    }
    void Move(int *row, int *line,char *move)//蛇头移动函数,通过读取输入的键盘方向键来改变蛇头方向
    {
    		if (GetAsyncKeyState(VK_UP))//上
    		{
    			*move = 'w';
    		}
    		else if (GetAsyncKeyState(VK_DOWN))//下
    		{
    			*move = 's';
    		}
    		else if (GetAsyncKeyState(VK_LEFT))//左
    		{
    			*move = 'a';
    		}
    		else if (GetAsyncKeyState(VK_RIGHT))//右
    		{
    			*move = 'd';
    		}
    		GetCoordinate(row, line, move);//将获得的方向键信息传输过去
    }
    
    void GetCoordinate(int *row, int *line, char *move)//蛇头自动移动,通过获取的方向信息,决定蛇头往哪个方向自动移
    {
    	if (*move == 'w')
    		(*row)--;
    	else if (*move == 's')
    		(*row)++;
    	else if (*move == 'a')
    		(*line)--;
    	else if (*move == 'd')
    		(*line)++;
    }
    
    void food(char arr[][LINE],int *x,int *y)//随机生成一个食物
    {
    	int flag = 0;
    	for (int i = 0; i < ROW; i++)
    	{
    		for (int j = 0; j < ROW; j++)
    		{
    			if (arr[i][j] == 3)//食物为3
    				flag = 1;
    		}
    	}
    	if (!flag)//没有食物就生成食物
    	{
    		//食物不能在边框上
    		*x = rand() % (ROW-2)+1;
    		*y = rand() % (LINE-2)+1;
    	}
    }
    
    void JudgeFood(int food_x,int food_y,int row,int line,int *count)//判断是否吃到食物
    {
    	if (food_x == row&&food_y == line)//吃到食物
    	{
    		(*count)++;//吃到食物身体个数+1
    	}
    }
    
    void GetBody(char arr[][LINE], body body[], int count, int temp_x, int temp_y)//蛇体坐标更新
    {
    	//保留前一个蛇体的坐标
    	int befor_x = 0;
    	int befor_y = 0;
    	if (count > 0)//最少有一个蛇身
    	{
    		//记录下最后一个蛇身的位置
    		befor_x = body[count - 1].x;
    		befor_y = body[count - 1].y;
    	}
    	
    	
    	int keep = count;//保存一份蛇体个数
    
    	while (count)//蛇体坐标覆盖,后面的覆盖前面的
    	{
    		if (count == 1)//只有一个蛇体时,为原来蛇头位置
    		{
    			body[count - 1].x = temp_x;
    			body[count - 1].y = temp_y;
    		}
    		else
    		{
    			body[count - 1].x = body[count - 2].x;
    			body[count - 1].y = body[count - 2].y;
    		}
    		count--;
    	}
    
    	while (keep)//将对应的蛇体坐标赋值
    	{
    		arr[body[keep-1].x][body[keep-1].y] = 4;
    		keep--;
    	}
    
    	if (befor_x!=0)//最后一个蛇身的上一次所在位置清空
    	{
    		arr[befor_x][befor_y] = 0;
    	}
    	
    }
    
    int  Judge(char arr[][LINE],int row,int line)//判断是否撞墙
    {
    	if (arr[row][line] == 1)
    	{
    		printf("	 --------------\n");
    		printf("	|   撞到墙壁   |\n");
    		printf("	|   游戏结束   |\n");
    		printf("	 --------------\n");
    		system("pause");
    		return 0;
    	}
    	return 1;
    }
    
    void Game()
    {
    	char arr[ROW][LINE]=
    	{
    		{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
    		{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
    
    	};//地图
    
    	int row = 10, line = 10;//蛇头起始位置
    	arr[row][10] = 2;
    
    	char move = 'w';//蛇头开始往上移动
    
    	int food_x = 0, food_y = 0;//食物的x,y坐标
    	srand((unsigned)time(NULL));//随机数种子
    
    	//保留一份蛇头移动前坐标
    	int temp_x = row;
    	int temp_y = line;
    
    	int count = 0;//蛇身体个数
    
    	body body[MAX] = { 0 };//蛇身坐标记录结构体数组
    
    	while (1)
    	{	
    		//生成食物
    		food(arr, &food_x, &food_y);
    		arr[food_x][food_y] = 3;
    
    		MapPrint(arr,count);//打印图形
    
    		if (count==0)
    		arr[row][line] = 0;//没有身体的时候,蛇头原来位置变为空白
    		
    		//保留蛇头移动前的位置
    		temp_x = row;
    		temp_y = line;
    
    		Move(&row, &line,&move);//蛇头移动
    
    		if (Judge(arr, line, row) == 0)//判断是否撞墙
    		{
    			break;
    		}
    
    		JudgeFood(food_x,food_y,row, line, &count);//判断是否吃到食物
    		GetBody(arr, body, count, temp_x, temp_y);//蛇身构造
    		arr[row][line] = 2;//新位置变成蛇头
    
    		Sleep(200);//通过控制休眠时间来控制蛇头移动速度
    	}
    }
    
    
    
    
    #include "snake.h"
    
    int main()
    {
    	
    	Game();
    	printf("游戏结束\n");
    
    	system("pause");
    	return 0;
    }
    
    展开全文
  • C语言编写洗牌发牌程序,供大家参考,具体内容如下 题目 现在只有一套扑克牌中52张副牌(无大王小王),包含了4种花色的牌 现在打乱顺序后分给甲乙丙丁四人 全部分配完毕后,输出甲乙丙丁四人所获得的扑克大小及...
  • C语言编写猜数字小游戏

    千次阅读 2021-01-21 21:28:56
    C语言编写猜数字小游戏 经过对C语言的初步学习,为提高编程能力,可以敲一些稍费脑筋的代码,猜数字就是一个很好的选择。要想实现该游戏,那么首先我们应该知道制作的大体思路。 电脑应随机产生一个数字(为便于...

    C语言编写猜数字小游戏

    经过对C语言的初步学习,为提高编程能力,可以敲一些稍费脑筋的代码,猜数字就是一个很好的选择。要想实现该游戏,那么首先我们应该知道制作的大体思路。

    1. 电脑应随机产生一个数字(为便于玩家猜的同时,增加难度和趣味性,所以选择1~100)
    2. 玩家输入所猜数字,电脑给予反馈。
    3. 玩家得知反馈后进行进一步操作。
      (如:所猜数字过大,所猜数字过小,所猜数字正确(是否重玩一局))

    知道大体思路后我们就可以着手写代码了

    首先玩游戏肯定要有进入界面,让别人知道这是什么游戏。

    #include<stdio.h>//头文件万万不能忘
    void menu()//无需返回值
    {
        printf("*********猜数字********\n");
    	printf("********1.PLAY********\n");
    	printf("********0.EXIT********\n");
    }
    

    接着可以将主函数大体写出来

    int main()
    {
        srand((unsigned int)time(NULL));//产生随机数
    	int input = 0;
    	do//选用do—while是因为它可以先执行后判断,符合当前需求
    	{
    		menu();
    		printf("请选择(1/0)\n");
    		scanf("%d", &input);
    		switch (input)//在此如果使用if语句有些繁琐
    		{
    		case 1:
    			game();//游戏主体,下面会写到
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输错啦,请重新输入\n");//应对输错情况
    			break;
    		}
    	} while(input);//0为假,非0为真,所以借input判断循环是否执行
    	return 0;
    }
    

    然后就是重头戏——游戏主体
    根据思路首先要产生随机数
    rand
    Generates a pseudorandom number.
    int rand( void );
    The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

    MSDN上对rand部分解释如上,我们可以知道rand的返回值在0到RAND_MAX(0x7fff,十进制为32767)之间,那么它是否可以起到产生随机数的作用呢?
    经测试其确实可以产生随机数,但再次编译时不难发现,两次的数字是相同的,这就使游戏的趣味性下降了。
    第一次
    第二次
    srand
    Sets a random starting point.
    void srand( unsigned int seed );

    所以需要srand为其提供生成起点,但srand又需要一个变化的随机数种子来帮助rand生成随机数,所以我们引入一个时间戳的概念(时间戳:当前时间和计算机的起始时间的差值,单位是秒;计算机起始时间:1970年1月1日上午8:00:00)time()函数返回的即是时间戳,时间肯定是一直在改变的,即时间戳也是如此。因每次只需取一次随机种子,所以将该语句放在主函数中。

    void game()
    {
         int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
    	int num;
    	while (1)//只要没猜出来就一直猜
    	{
    		printf("猜猜看:");
    		scanf("%d", &num);
    		if (num > ret)
    		{
    			printf("猜大了\n");
    		}
    		else if (num < ret)
    		{
    			printf("猜小了\n");
    		}
    		else
    		{
    			printf("恭喜你猜对了\n");
    			break;//猜对后跳出循环
    		}
    	}
    }
    

    最后再写一下主程序

    #include<stdio.h>
    #include<stdlib.h>//为使用srand
    #include<time.h>//为使用time()函数
    void menu()
    {
    	printf("********猜数字********\n");
    	printf("********1.PLAY********\n");
    	printf("********0.EXIT********\n");
    }
    void game()
    {
    	int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
    	int num;
    	while (1)//只要没猜出来就一直猜
    	{
    		printf("猜猜看:");
    		scanf("%d", &num);
    		if (num > ret)
    		{
    			printf("猜大了\n");
    		}
    		else if (num < ret)
    		{
    			printf("猜小了\n");
    		}
    		else
    		{
    			printf("恭喜你猜对了\n");
    			break;
    		}
    	}
    }
    int main()
    {
    	int input = 0;
        srand((unsigned int)time(NULL));
    	do//选用do—while是因为它可以先执行后判断,符合当前需求
    	{
    		menu();
    		printf("请选择(1/0)\n");
    		scanf("%d", &input);
    		switch (input)//在此如果使用if语句有些繁琐
    		{
    		case 1:
    			game();//游戏主体,下面会写到
    			break;
    		case 0:
    			printf("退出游戏\n");
    			break;
    		default:
    			printf("输错啦,请重新输入\n");//应对输错情况
    			break;
    		}
    	} while(input);//0为假,非0为真,所以借input判断循环是否执行
    	return 0;
    }
    

    ps:第一次写技术类博客,还有很多地方需要改正完善,望各位大佬可以指出我的不足。

    展开全文
  • C语言编写的八皇后问题,搜索回溯法的经典案例,可扩展为自动走迷宫、跳马问题、跳马遍历国际象棋棋盘、四色地图、一笔画等问题,是初学者必须要学习和掌握的编程方法和思路
  • C语言 编写“剪刀石头布”小游戏

    千次阅读 多人点赞 2020-11-29 17:54:33
    希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序)我也会虚心接受大家的建议~ 一、游戏原理 “剪刀石头布”这个游戏,想必大家都很熟悉了。两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在...
  • C语言编写简易计算器的思路和过程

    千次阅读 2009-07-29 13:05:00
    关于这个计算器,我已经改进了好几次,使用do-while和switch语句嵌套来进行简单的四则运算。但是在处理“/”运算时,由于分母不能为零,所以我使用了if-else语句。如下:#include main(void){ float sum1,sum2,jum...
  • C语言编写学生籍贯信息记录簿

    千次阅读 多人点赞 2020-01-31 12:09:10
    本文是利用简单的C语言编写的学生籍贯信息记录簿,写这篇是为了记录学习过程,也为后来者提供一些参考和思路。我使用的平台为Visual C++6.0。其功能主要分为录入、保存、查询、浏览、增加、修改、删除信息七大板块。...
  • C语言编写三子棋

    2019-11-08 17:36:36
    代码编写思路如下: 第一在main.c中写出游戏的主要框架,包括有初始界面的菜单项和main函数: //游戏主框架 #include "game.h" void Menu() { printf("*****************************\n"); printf("**** 欢迎...
  • C语言编写99乘法表

    万次阅读 多人点赞 2018-09-02 23:08:49
    /* 文件名:99乘法表 ...编写思路:使用循环语句来控制变量 */ #include&lt;stdio.h&gt; int main() { int sum; int i, j; for (i = 0; i &lt; 10; i++) { for (j = 0; j &lt; 1...
  • 鉴于我上一个写的贪吃蛇程序把头文件和源文件分开写后有人可能会没看出来那是两个文件,本次把所有代码写在同一个文件里。下面是代码。本次程序没有去网上找一些好看的素材,所有的图案都是用EasyX图形库函数画的。...
  • C语言程序设计课程单元案例 常州信息职业技术...打印出362*2*3*3 二案例设计思路 本案例的设计思路如下 1能够根据素数的定义编写相应代码可以判断一个数字是否素数 2根据题目要求能够将一个正整数分解为了若干个素数因
  • C语言 编写线段树

    2020-10-05 20:16:49
    线段树同样也是一个比较冷门的...而整个函数的思路为,mid为起点和终点的中点,根节点代表[start,end]的元素和,而它的两个子节点就是[start,mid]和[mid+1,end],同时接着往下走,把数组进一步进行划分,由于用的是
  • c语言打印数字塔,最简代码,思路明确! c语言打印数字塔,最简代码,思路明确! c语言打印数字塔,最简代码,思路明确! c语言打印数字塔,最简代码,思路明确! c语言打印数字塔,最简代码,思路明确!
  • c语言编写图书管理系统例子

    千次阅读 2021-04-08 20:37:59
    #关于用C语言(c++类似)编写一个在控制台展示的图书管理系统(帮朋友写的课程作业) #其中只有图书增加 删除 借书 还书 查找图书 5个功能(小试牛刀) #工具:visual studio2019 #设计图 #思路是:打算用链表操作...
  • Problem Description Roy has just moved into a new apartment. Well, actually the apartment itself is not very new, even dating back to the days before people had electricity in their houses....
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一...
  • c语言编写的成绩管理系统,是自己在大学期间做过的课程设计,里面有详细的过程说明,课程设计思路及设计流程图,以及源代码。
  • C语言编写的病毒范例

    2011-03-31 23:17:53
    可以供初学者玩玩的小C语言小程序,可以通过这个东西来体会编程的一些思路和过程,希望以后对大家有帮助
  • 课程设计时自己编写的代码。 用的是C语言。 功能要求(部分,学生可根据自己的设计思路进行完善): (1)建立文件:学生信息库; (2)增加、删除、修改、查询学生记录; (3)显示记录; (4)统计:成绩排序、班...
  • Problem Description For any school, it is hard to find a feasible accommodation plan with every student assigned to a suitable apartment while keeping everyone happy, let alone an optimal one....
  • 利用c语言编写三子棋的代码,相对来说比较简单,三子棋其实就可以看作是以个三行三列的二维数组,然后对其里面的每个元素进行赋值。因此我们首先需要理清楚三子棋完成的思路。 1.首先我们需要一个棋盘,所以需要一...
  • C语言编写简易图书管理系统

    万次阅读 多人点赞 2019-02-14 19:44:30
    2.程序设计思路 图书管理系统保持记录以进行删除,查询,借书,还书,退出,添加等等操作;使用菜单以实现功能选择模块。 3.功能模块图 4.数据结构设计 1.编写主函数main () 2.设计功能选项并标号,用switch...
  • 目录用C语言编写洗牌发牌程序题目要素提取补充思路可能出现的问题代码程序运行图片 用C语言编写洗牌发牌程序 题目 现在只有一套扑克牌中52张副牌(无大王小王),包含了4种花色的牌 现在打乱顺序后分给甲乙丙丁四人 ...
  • C语言 编写并查集

    2020-10-05 16:05:49
    在做无向图是否有环的时,一般是用深度或者广度优先搜索遍历一遍,但是并查集提供了另一种思路。 首先需要用一个parent数组来记录该点的连接点,通过这个数组的一个位置来寻找它的最父辈的点。首先按照数组大小新建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,119
精华内容 447
关键字:

c语言编写思路

c语言 订阅