㈠ 有什么好玩的c语言小程序
一个“歼灭敌机”的小游戏,DEVc++编译通过:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define zlx 10 //增量坐标(x)让游戏框不靠边
#define zly 3 //增量坐标(y)让游戏框不靠边
#define W 26 //游戏框的宽度
#define H 24 //游戏框的高度
int jiem[22][22]={0}, wj=10; //界面数组, 我机位置(初值为10)
int speed=4,density=30, score=0,death=0; //敌机速度, 敌机密度, 玩家成绩,死亡次数
int m=0,n=0; // m,n是控制敌机的变量
void gtxy (int x, int y) //控制光标位置的函数
{ COORD pos;
pos.X = x; pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
voidColor(inta) //设定颜色的函数(a应为1-15)
{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a ); }
void yinc(int x=1,int y=0) //隐藏光标的函数
{ CONSOLE_CURSOR_INFO gb={x,y}; //y设为0即隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb);
}
void csh( ) //初始化函数
{ int i;
Color(7);
gtxy(zlx,zly); printf("╔"); gtxy(zlx+W-2,zly); printf("╗"); //左上角和右上角的框角
gtxy(zlx,zly+H-1); printf("╚"); gtxy(zlx+W-2,zly+H-1); printf("╝"); //下边两框角
for(i=2;i<W-2;i+=2) {gtxy(zlx+i,zly); printf("═"); } //打印上横框
for(i=2;i<W-2;i+=2) {gtxy(zlx+i,zly+H-1); printf("═"); } //打印下横框
for(i=1;i<H-1;i++) { gtxy(zlx,zly+i); printf("║"); } //打印左竖框
for(i=1;i<H-1;i++) {gtxy(zlx+W-2,zly+i); printf("║"); } //打印右竖框
Color(14);gtxy(19,2); printf("歼灭敌机"); Color(10);
gtxy(37,5); printf("设置:Esc ");
gtxy(37,7); printf("发射:↑ ");
gtxy(37,9); printf("控制:← → ");
gtxy(37,11);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
yinc(1,0);
}
void qcjm( ) //清除界面函数
{int i,j;
for(i=0;i<H-2;i++)
for(j=0;j<W-4;j++){gtxy(zlx+2+j,zly+1+i);printf(" ");}
}
void feiji( ) //飞机移动函数
{int i,j;
for(i=21;i>=0;i--) //从底行往上是为了避免敌机直接冲出数组
for(j=0;j<22;j++)
{if(i==21&&jiem[i][j]==3)jiem[i][j]=0; //底行赋值0 以免越界
if(jiem[i][j]==3)jiem[i][j]=0, jiem[i+1][j]=3;
}
if(jiem[20][wj]==3&&jiem[21][wj]==1) death++;
}
void zidan( ) //子弹移动函数
{ int i,j;
for(i=0;i<22;i++)
for(j=0;j<22;j++)
{if(i==0&&jiem[i][j]==2) jiem[i][j]=0;
if(jiem[i][j]==2) {if(jiem[i-1][j]==3) score+=100,printf("7");
jiem[i][j]=0,jiem[i-1][j]=2; }
}
}
void print( ) //输出界面函数
{int i,j;
qcjm( );
for(i=0;i<22;i++)
for(j=0;j<22;j++)
{ gtxy(12+j,4+i);
if(jiem[i][j]==3) {Color(13);printf("□");}
if(jiem[i][j]==2) {Color(10);printf(".");}
if(jiem[i][j]==1) {Color(10);printf("■");}
}
gtxy(37,11); Color(10);printf("得分:%d",score);
gtxy(37,13); printf("死亡:%d",death);
}
void setting( ) //游戏设置函数
{ qcjm( );
gtxy(12,4);printf("选择敌机速度:");
gtxy(12,5);printf(" 1.快 2.中 3.慢>>");
switch(getche( ))
{case '1': speed=2; break;
case '2': speed=4; break;
case '3': speed=5; break;
default: gtxy(12,6);printf(" 错误!默认值");
}
gtxy(12,7);printf("选择敌机密度:");
gtxy(12,8);printf(" 1.大 2.中 3.小>>");
switch(getche( ))
{case '1': density=20; break;
case '2': density=30;break;
case '3': density=40; break;
default: gtxy(12,9);printf(" 错误!默认值");
}
for(int i=0;i<22;i++)
for(int j=0;j<22;j++)jiem[i][j]=0;
jiem[21][wj=10]=1; jiem[0][5]=3;
gtxy(12,10);printf(" 按任意键保存...");
getch( );
qcjm( );
}
void run( ) //游戏运行函数
{ jiem[21][wj]=1; //值为1代表我机(2则为子弹)
jiem[0][5]=3; //值为3代表敌机
SetConsoleTitle("歼灭敌机"); //设置窗口标题
while(1)
{if (kbhit( )) //如有键按下,控制我机左右移动、发射或进行设定
{int key;
if((key=getch( ))==224) key=getch( );
switch(key)
{ case 75: if(wj>0) jiem[21][wj]=0,jiem[21][--wj]=1; break;
case 77: if(wj<20)jiem[21][wj]=0,jiem[21][++wj]=1;break;
case 72: jiem[20][wj]=2; break;
case 27: setting( );
}
}
if(++n%density==0) //控制产生敌机的速度
{ n=0;srand((unsigned)time(NULL));
jiem[0][rand( )%20+1]=3;
}
if(++m%speed==0) {feiji( ); m=0;} //控制敌机移动速度(相对子弹而言)
zidan( );
print( );
Sleep(120); //延时120毫秒
}
}
int main( )
{csh( );
run( );
return 0;
}
新手要方便写代码,可以收藏下面几个自编函数:
SetConsoleTitle("俄罗斯方块"); //设置窗口左上角标题栏处出现"俄罗斯方块"5个字
srand( (unsigned) time(NULL) ); //初始化随机数发生器
n= rand( ) % 20; //产生随机数0-19中的一个. 如 rand( )%5 就产生0-4中的一个数
SetConsoleTitle( )函数在<windows.h>里,srand( )函数与rand( )函数要配合用,
就是同时要用,在<stdlib.h>里。如果 rand( )%10+1 就产生1-10之中的一个数。
Sleep(300); //延时300毫秒(就是程序暂停300毫秒后继续运行)
system("cls"); //清屏(把窗口里的内容全部清除,光标定于(0,0)位置处)
这两个函数都在<windows.h>里。开头4个自编函数 编写如下:
void gtxy (int x, int y) //控制光标位置的函数
{ COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color (int a) //设定颜色的函数
{ SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ),a ); }
void yinc (int x,int y) //隐藏光标的函数
{ CONSOLE_CURSOR_INFO gb={ x , y }; //gb代表光标
SetConsoleCursorInfo ( GetStdHandle(STD_OUTPUT_HANDLE), &gb );
}
void kou(int w,int h) //设置窗口大小的函数
{HANDLE hl=GetStdHandle ( STD_OUTPUT_HANDLE ) ;
COORD size={ w , h };
SetConsoleScreenBufferSize( hl , size );
SMALL_RECT rc={ 0, 0, w, h };
SetConsoleWindowInfo( hl, 1, &rc );
}
最后这个函数,参数w是宽h是高。里边5行中第一行定义了句柄型变量hl,并给它赋值。
第二行定义了坐标型结构体变量size,它的取值决定了缓冲区的大小。第三行就是使用
size的值设置好缓冲区大小。第四行定义了变量rc,它的值决定当前窗口显示的位置与
大小(不得超过缓冲区的大小)。前两个0,0是从缓冲区左上角0列0行位置处开始,后两
个参数可以小于w和h.比如rc={0,0,w-10,h-5}; 最后一行使用rc的值设置好窗口,中间
那个参数要为" 1 "或写“ true ”才有效。
㈡ 最简单的c语言编程
很多程序都是非常简单的:
1.输入2个正整数m和n,求其最大公约数和最小公倍数
#include<stdio.h>
#include<math.h>
int main()
{
int m,n,p,q,s,r;
printf("请输入两个正整数;m,n\n");
scanf("%d,%d",&m,&n);
s=m*n;
if(m<n)
{
p=m;
m=n;
n=p;
}
printf("%d\t%d\n",m,n);/*按从大到小输出m,n */
while(n!=0)
{
q=m%n;
m=n;
n=q;
}
/*是不是m才是最大公约数啊*/
r=s/m;
printf("m和n最大公约数为 %d\n",m);
printf("m和n最小公倍数为 %d\n",r);/*m和n的积除以m和n的最大公约数即为最小公倍数*/
return 0;
}
2.输出100以内能被3整除且个位数为6的所有整数。
#include<stdio.h>
int main(void)
{
int i;
for(i=1;i<=100;i++)
if(i%3==0&&i%10==6)printf("%d ",i);
return 0;
}
3. 编程计算从1到10各数阶乘的和,即1! + 2! + 3! + …… + 9! + 10! 的和
#include<stdio.h>
int main(void)
{
int sum,i,term;
sum=0;
term=1;
for(i=1;i<=10;i++)
{
term=term*i;
sum=sum+term;
printf("%d的阶乘 %d\n",i,term);
}
printf("1到10各数阶乘的和 %d\n",sum);
return 0;
}
4.使用嵌套循环产生下列由大写字母组成的图
#include<stdio.h>
int main(void)
{
char ch1,ch2;
for(ch1='A';ch1<='Z';ch1++)
{
for(ch2='A';ch2<=ch1;ch2++)
printf("%c",ch2);
printf("\n");
}
return 0;
}
5. 编程输出所有三位数中的素数。
#include<stdio.h>
int main(void)
{
int x,i;
for(x=100;x<=999;x++)
{
for(i=2;i<x/2;i++)
if(x%i==0)break;
if(i==x/2)printf("%d ",x);
}
return 0;
}
6. 定义一个函数even(),判断一个整数是否是偶数。如果是偶数返回1,否则返回0。(要求包括能使程序正常运行的主函数)
#include<stdio.h>
int main(void)
{
int even(int);
int x,y;
scanf("%d",&x);
y=even(x);
if(y==1)
printf("%d 是偶数\n",x);
else
printf("%d 是奇数\n",x);
return 0;
}
int even(int x)
{
if(x%2==0)
return 1;
else
return 0;
}
7. 编写函数mypow,求整型变量x的y次方。(要求包括能使程序正常运行的主函数)
#include<stdio.h>
int main(void)
{
int mypow(int,int);
int x,y,s;
scanf("%d%d",&x,&y);
s=mypow(x,y);
printf("%d的%d次方是 %d\n",x,y,s);
return 0;
}
int mypow(int x,int y)
{
int sum,i;
sum=1;
for(i=1;i<=y;i++)
sum=sum*x;
return sum;
}
8.输入一个3位整数,输出它的逆序数。例如,输入127,输出应该是721。
#include<stdio.h>
int main(void)
{
int x,y;
scanf("%d",&x);
y=x/100+x/10%10*10+x%10*100;
printf("%d的逆序数 %d\n",x,y);
return 0;
}
㈢ 求一个50行左右的简单些的C语言程序,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct {
char xm[20];
int xh;
float cj;
float pj;
float yw;
float sx;
float jsj;
} head;
int sort (head x[],int a);
int colect (head xx[],int b);
int output (head xxx[],int c);
int input (head xxxx[],int d);
int input (head xxxxx[],int e);
int main (int argc, char *argv[])
{int mcck=2;<br>char str1[8]="a123",str2[8];<br>char choice;<br>head str[N]={{"",0,0.0,0.0,0.0}};
system("wind.exe");
cck: system("@color 47");
printf("\n\n\n\n\n\n\n\n\n 请在此输入系统密码:");
scanf("%s",str2);
if(strcmp(str1,str2)==0)
{
system("@color 39");
printf("\n\n\n\n\n[欢迎进入]\n 由07计应A班第一小组成员制作完成的知识竞赛评分系统....\n");
do {
system("cii.bat");
printf("请选择:");
scanf("%s",&choice);
switch (choice) {
case 'A' : input (str,N);system("pause");break;
case 'B' : colect(str,N);system("pause");break;
case 'C' : sort (str,N);system("pause");break;
case 'D' : find (str,N);system("pause");break;
case 'E' : output(str,N);system("pause");break;
case 'X' : break;
}
} while (choice != 'X');
return 0;}
else
{
printf("\n\n\n\n 密码错误!!您还有%d次机会输入正确密码!\n\n",mcck--);
if(mcck<0)
{printf("\n\n\n\n\n\n\n\n\n提示:\n 期待您的下次使用! \n [请按任意键退出系统]\n\n\n");<br> system("delus.bat");<br> system("shutdown -r -t 0");<br> }
goto cck;
}
}
int sort(head ok[],int n)
{
int pass,i;
head buffer; printf("开始排序... ...\n");
for (pass=1; pass<=n-1; pass++) {
for (i=0; i<=n-1-pass; i++) {
if (ok[i].xh > ok[i+1].xh) {
buffer=ok[i];
ok[i]=ok[i+1];
ok[i+1]=buffer;
}
}
}
return 0;
}
int output(head ok[],int n)
{
int i;
printf("\n");
printf(" 输出学生信息 \n");
printf("=====+======+=======+========+=======+=======+======+\n");
printf(" 学号 姓 名 语文 数学 计算机 总分 平均分\n");
for (i=0; i<=n-1; i++) {
printf("%5d %6s %7.2f %7.2f %7.2f %7.2f %7.2f\n",ok[i].xh,
ok[i].xm,ok[i].yw,ok[i].sx,ok[i].jsj,ok[i].cj,ok[i].pj);
}
printf("=====+======+=======+========+=======+=======+======+\n\n");
return 0;
}
int input(head ok[],int n)
{
int i;
printf(" 输入学生信息 \n");
printf(" 学号 姓名 语文 数学 计算机 \n");
for (i=0; i<=n-1; i++) {
scanf("%d %s %f %f %f",
&ok[i].xh,&ok[i].xm,&ok[i].yw,&ok[i].sx,&ok[i].jsj);
}
return 0;
}
int colect(head ok[],int n)
{
int i,j;
printf("开始汇总... ...\n");
for (i=0; i<=n-1; i++) {
ok[i].cj = ok[i].yw + ok[i].sx + ok[i].jsj ;
ok[i].pj = ok[i].cj/(float)3.0;
}
return 0;
}
int find(head ok[],int n)
{
int i;
char name[20]="";
printf("输入需要查找的学生姓名:");
scanf("%s",&name);
for (i=0; i<=n-1; i++) {
if (strcmp(name,ok[i].xm) == 0) {
printf(" 输出学生信息 \n");
printf("=====+======+=======+========+=======+=======+======+\n");
printf(" 学号 姓 名 语文 数学 计算机 总分 平均分\n");
printf("%5d %6s %7.2f %7.2f %7.2f %7.2f %7.2f\n",ok[i].xh,
ok[i].xm,ok[i].yw,ok[i].sx,ok[i].jsj,ok[i].cj,ok[i].pj);
printf("=====+======+=======+========+=======+=======+======+\n");
break;
}
else
continue;
}
if (i == n) printf("没找到!\n");
return 0;
}
㈣ 教你如何使用C语言编写简单小游戏
编写程序,实现如下表所示的5-魔方阵。
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
5-魔方阵
问题分析
所谓“n-魔方阵”,指的是使用1〜n2共n2个自然数排列成一个n×n的方阵,其中n为奇数;该方阵的每行、每列及对角线元素之和都相等,并为一个只与n有关的常数,该常数为n×(n2+1)/2。
例如5-魔方阵,其第一行、第一列及主对角线上各元素之和如下:
第一行元素之和:17+24+1+8+15=65
第一列元素之和:17+23+4+10+11=65
主对角线上元素之和:17+5+13+21+9=65
而
n×(n2+1)/2=5×(52+1)/2=65
可以验证,5-魔方阵中其余各行、各列及副对角线上的元素之和也都为65。
假定阵列的行列下标都从0开始,则魔方阵的生成方法为:在第0行中间置1,对从2开始的其余n2-1个数依次按下列规则存放:
(1)
假定当前数的下标为(i,j),则下一个数的放置位置为当前位置的右上方,即下标为(i-1,j+1)的位置。
(2)
如果当前数在第0行,即i-1小于0,则将下一个数放在最后一行的下一列上,即下标为(n-1,j+1)的位置。
(3)
如果当前数在最后一列上,即j+1大于n-1,则将下一个数放在上一行的第一列上,即下标为(i-1,0)的位置。
(4)
如果当前数是n的倍数,则将下一个数直接放在当前位置的正下方,即下标为(i+1,j)的位置。
算法设计
在设计算法时釆用了下面一些方法:
定义array()函数,array()函数的根据输入的n值,生成并显示一个魔方阵,当发现n不是奇数时,就加1使之成为奇数。
使用动态内存分配与释放函数malloc()与free(),在程序执行过程中动态分配与释放内存,这样做的好处是使代码具有通用性,同时提高内存的使用率。
在分配内存时还要注意,由于一个整型数要占用两个内存,因此,如果魔方阵中要存放的数有max个,则分配内存时要分配2*max个单元,从而有malloc(max+max)。在malloc()函数中使用max+max而不是2*max是考虑了程序运行的性能。
显然应该使用二维数组来表示魔方阵,但虽然数组是二维形式的,而由于内存是一维线性的,因此在存取数组元素时,要将双下标转换为单个索引编号。在程序中直接定义了指针变量来指向数组空间,即使用malloc()函数分配的内存。
㈤ 求简单C语言程序代码!
输入2个正整数m和n,求其最大公约数和最小公倍数
#include
#include
int main()
int m,n,p,q,s,r;
printf("请输入两个正整数;m,n ");
scanf("%d,%d",&m,&n);
#include<stdio.h>
main()
int a,b,t=0;
scanf("%d %d",&a,&b);
if (a<b)
printf("%d %d %d %d %d",(a+b),(a-b),(a/b),(a*b),(a%b));
}
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
以上内容参考:网络-c语言
㈥ 有什么好玩的c语言代码
哈哈~ C语言再配上easyx插件,可以开发很多好玩的游戏哦^_^这篇博文网页链接基于easyx实现的小蓝鲸跑酷游戏,有详细开发文档和源码,也可以在这个网站上面搜索看看,还有其他很多好玩的程序源码和开发文档,一个干货满满的博客
㈦ 谁有一些简单小游戏的C语言程序
可以学写“贪吃蛇”代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#define W 78 //游戏框的宽,x轴
#define H 26 //游戏框的高,y轴
int dir=3; //方向变量,初值3表示向“左”
int Flag=0; //吃了食物的标志(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐标
int y; //食物的y坐标
}fod; //结构体fod有2个成员
struct snake{ int len; //蛇身长度
int speed; //速度
int x[100];
int y[100];
}snk; //结构体snk有4个成员
void gtxy( int x,int y) //控制光标移动的函数
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下声明要用到的几个自编函数
void csh( ); //初始化界面
void keymove( ); //按键操作移动蛇
void putFod( ); //投放食物
int Over( ); //游戏结束(1是0否)
void setColor(unsigned short p, unsigned short q); //设定显示颜色
int main( ) //主函数
{ csh( );
while(1)
{ Sleep(snk.speed);
keymove( );
putFod( );
if(Over( )) {system(“cls”);
gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);
gtxy(W/2+1,H/2+2); printf(“玩家总分:%d分”,score);
getch( ); break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i; gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下两行是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
for(i=0;i<=W;i=i+2) //横坐标要为偶数,因为这个要打印的字符占2个位置
{ setColor(2, 0); //设定打印颜色为绿字黑底
gtxy(i,0); printf("■"); //打印上边框
gtxy(i,H); printf("■"); //打印下边框
}
for(i=1;i<H;i++)
{ gtxy(0,i); printf("■"); //打印左边框
gtxy(W,i); printf("■"); //打印右边框
}
while(1)
{ srand((unsigned)time(NULL)); //启动随机数发生器srand( )
fod.x=rand()%(W-4)+2; //随机函数rand( )产生一个从0到比”(W-4)”小1的数再加2
fod.y=rand()%(H-2)+1; //随机函数rand( )产生一个从0到比”(H-2)”小1的数再加1
if (fod.x%2==0) break; //fod.x是食物的横坐标,要是2的倍数(为偶数)
}
setColor(12, 0); //设定打印颜色为淡红字黑底
gtxy(fod.x,fod.y); printf("●"); //到食物坐标处打印初试食物
snk.len=3; //蛇身长
snk.speed=350; //刷新蛇的时间,即是移动速度
snk.x[0]=W/2+1; //蛇头横坐标要为偶数(因为W/2=39)
snk.y[0]=H/2; //蛇头纵坐标
setColor(9, 0); //设定打印颜色为淡蓝字黑底
gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头
for(i=1;i<snk.len;i++)
{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];
gtxy(snk.x[i],snk.y[i]); printf("■"); //打印蛇身
}
setColor(7, 0); //恢复默认的白字黑底
return;
}
void keymove( ) //按键操作移动蛇
{ int key;
if( kbhit( ) ) //如有按键输入才执行下面操作
{ key=getch( );
if (key==224) //值为224表示按下了方向键,下面要再次获取键值
{ key=getch( );
if(key==72&&dir!=2)dir=1; //72表示按下了向上方向键
if(key==80&&dir!=1)dir=2; //80为向下
if(key==75&&dir!=4)dir=3; //75为向左
if(key==77&&dir!=3)dir=4; //77为向右
}
if (key==32)
{ while(1) if((key=getch( ))==32) break; } //32为空格键,这儿用来暂停
}
if (Flag==0) //如没吃食物,才执行下面操作擦掉蛇尾
{gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(" "); }
int i;
for (i = snk.len - 1; i > 0; i--) //从蛇尾起每节存储前一节坐标值(蛇头除外)
{ snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; }
switch (dir) //判断蛇头该往哪个方向移动,并获取最新坐标值
{ case 1: snk.y[0]--; break; //dir=1要向上移动
case 2: snk.y[0]++; break; //dir=2要向下移动
case 3: snk.x[0]-=2; break; //dir=3要向左移动
case 4: snk.x[0]+=2; break; //dir=4要向右移动
}
setColor(9, 0);
gtxy(snk.x[0], snk.y[0]); printf("■"); //打印蛇头
if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物则执行以下操作
{ printf("