本文目录一览:
- 1、C++语言编写一个大概300~600行的程序解决一个实际问题。(必须使用类)
- 2、求C语言600行的学生管理系统源程序
- 3、用c语言编写的一个小程序,200行以上,急!!!
- 4、找人帮我编一个600行的代码
- 5、求一个用C语言编写的小游戏代码
- 6、求一个c语言制作的小游戏或者小软件,行数不小于600,挺急的
C++语言编写一个大概300~600行的程序解决一个实际问题。(必须使用类)
从今天凌晨3点多,一直写代码写到现在,除了吃饭没休息过。希望这个程序对你有所帮助。如果有任何疑惑的地方,可以继续提问、交流。附件里有源代码文件。
代码已经超过600行,这里只有部分代码,因为已经超过字数限制。其余代码可在源文件里查看。
#include iostream
#include conio.h
#include math.h
using namespace std;
#define Mc_MaxByte_MenuItem 61 //菜单项字符串长度最多61字节
#define Mc_MaxBufferSize 17 //缓存最大字节数。因为该程序只支持输入小于等于2字节的整型,而2字节整型的二进制位数有16位,所以需要17个字节保存二进制字符串,最后一个为结束符。
#define Mc_Back (-1) //返回上一级菜单
#define Mc_Exit (-2) //退出程序
#define Mc_Error (-3) //输入错误
#define Mc_Binary 0 //二进制
#define Mc_Octonary 1 //八进制
#define Mc_Decimalism 2 //十进制
#define Mc_Hexadecimal 3 //十六进制
class Calculator //计算器类
{
protected:
char chr1Buffer[Mc_MaxBufferSize]; //用于接收用户输入的数学算数运算式,如:“23+6*5-400/20=”
bool Chr1SameAsInt(char* chrPt,int number); //判断2个整数是否相等。前一个是用字符串表示的整数,后一个就是int型的整数。
int Chr1ToInt(const char* chrPt); //将用字符串表示的整数转换为int型整数
int Menu(char* chrPtMenuTitle,char chr2MenuItem[][Mc_MaxByte_MenuItem], int intItemCount,bool bCreateBackItem); //显示一个菜单。最后一个参数表示:是否创建“返回”选项
void ClearScreen(); //清屏
void ShowInf(const char* chrInf); //显示一条信息
void NextLine(int count); //换行
int NumberFormTransitionUI(char* title); //“整数的进制转换”功能界面
void InputToBuffer(const char* title);
const char* GetBuffer();
void (Calculator::*funPt)(const char* chrSource,char* chrResult); //函数指针
int NumberFormTransition(int source,int target); //进制转换函数。source源数据进制形式,target目标进制形式
void BinaryToOctonary(const char* chrPtBinary,char* chrPtOctonaryResult); //二进制转八进制。得出的结果将用字符串表示,且用chrPtOctonaryResult接收转换后的结果
void BinaryToDecimalism(const char* chrPtBinary,char* chrPtDecimalismResult); //二进制转十进制
void BinaryToHexadecimal(const char* chrPtBinary,char* chrPtHexadecimalResult); //二进制转十六进制
void OctonaryToDecimalism(const char* chrPtOctonary,char* chrPtDecimalismResult); //八进制转十进制
void OctonaryToBinary(const char* chrPtOctonary,char* chrPtBinaryResult); //八进制转二进制
void OctonaryToHexadecimal(const char* chrPtOctonary,char* chrPtHexadecimalResult); //八进制转十六进制
void DecimalismToBinary(const char* chrPtDecimalism,char* chrPtBinaryResult); //十进制转二进制
void DecimalismToOctonary(const char* chrPtDecimalism,char* chrPtOctonaryResult); //十进制转八进制
void DecimalismToHexadecimal(const char* chrPtDecimalism,char* chrPtHexadecimalResult); //十进制转十六进制
void HexadecimalToDecimalism(const char* chrPtHexadecimal,char* chrPtDecimalismResult); //十六进制转十进制
void HexadecimalToOctonary(const char* chrPtHexadecimal,char* chrPtOctonaryResult); //十六进制转八进制
void HexadecimalToBinary(const char* chrPtHexadecimal,char* chrPtBinaryResult); //十六进制转二进制
public:
int UI(); //计算器界面
};
int Calculator::UI()
{
int code = !Mc_Exit, CodeTmp = 1;
char chr2Menu[][Mc_MaxByte_MenuItem] = { "数的进制转换" };
while (code != Mc_Exit)
{
code = Menu("计算器", chr2Menu, 1, false);
switch (code)
{
case 1:
ClearScreen();
CodeTmp = NumberFormTransitionUI(chr2Menu[0]);
break;
case Mc_Error:
ShowInf("\n 输入错误!请重新输入。 \n 按任意键继续...... ");
getch();
ClearScreen();
}
if (CodeTmp == Mc_Exit)
code = Mc_Exit;
}
return code;
}
bool Calculator::Chr1SameAsInt(char* chrPt,int number)
{
int len = strlen(chrPt) - 1;
while(number len = 0)
{
if (chrPt[len] - 48 != number % 10)
break;
len --, number /= 10;
}
if (len 0 !number)
return true;
return false;
}
int Calculator::Chr1ToInt(const char* chrPt)
{
int len = strlen(chrPt), num = 0, i;
for (i = 0; len 0; len --, i ++) //将用字符串表示的数字转换成int整数
num += (chrPt[i] - 48) * (int)pow(10, len - 1);
return num;
}
int Calculator::Menu(char* chrPtMenuTitle,char chr2MenuItem[][Mc_MaxByte_MenuItem],int intItemCount,bool bCreateBackItem)
{
int index, choice = 0, len, i;
cout"-------------- "chrPtMenuTitle" --------------"endlendl;
for (index = 1; index = intItemCount; index ++)
cout" "index"."chr2MenuItem[index - 1]endl;
if (bCreateBackItem)
cout" "index ++".""返回"endl;
cout" "index".""退出"endl;
InputToBuffer("请输入相应选项的序号:");
if (bCreateBackItem)
{
if (Chr1SameAsInt(chr1Buffer, index - 1))
return Mc_Back; //用户选择了返回选项
}
if (Chr1SameAsInt(chr1Buffer, index))
return Mc_Exit; //用户选择了退出选项
len = strlen(chr1Buffer);
for (i = 0; len 0; len --, i ++) //将用字符串表示的数字转换成int整数
choice += (chr1Buffer[i] - 48) * (int)pow(10, len - 1);
if (choice 1 || choice index)
return Mc_Error;
return choice;
}
void Calculator::ClearScreen()
{
system("cls");
}
void Calculator::ShowInf(const char* chrInf)
{
coutchrInf;
}
void Calculator::NextLine(int count)
{
while (count-- 0)
{
cout'\n';
}
}
void Calculator::InputToBuffer(const char* title)
{
couttitle;
cinchr1Buffer;
}
const char* Calculator::GetBuffer()
{
return chr1Buffer;
}
void Calculator::BinaryToOctonary(const char* chrPtBinary,char* chrPtOctonaryResult)
{
int index, x, numTmp = 0;
bool bBreak;
const char* chrPt;
char chr1Tmp[6]; //十进制65535等于八进制177777,这个最大值八进制数有6位数,所以至少需要6个字节。这个临时数组所保存的字符串不需要结束符。
chrPt = chrPtBinary + strlen(chrPtBinary) - 1; //让chrPt指向最后一个字符
index = 0, bBreak = false;
while (bBreak == false)
{
for (x = 0, numTmp = 0; x 3; x ++, chrPt --)
{ // 01011011 --每3位二进制数对应一个八进制数。从最低位,右边开始:011=3,011=3,01=1。则该二进制数的八进制形式为133(最后结果需要反序)
if (chrPt chrPtBinary)
numTmp += (*chrPt - 48) * (int)pow(2, x);
else
{
numTmp += (*chrPt - 48) * (int)pow(2, x);
bBreak = true;
break;
}
}
chr1Tmp[index ++] = numTmp + 48;
}
if (index 1)
{
for (-- index; index 0; index --)
if (chr1Tmp[index] != '0')
break;
}
else
{
chr1Tmp[0] = '0';
index = 0;
}
for (; index = 0; chrPtOctonaryResult ++, index --)
*chrPtOctonaryResult = chr1Tmp[index];
*chrPtOctonaryResult = '\0'; //给返回参数加上结束符
}
void Calculator::DecimalismToBinary(const char* chrPtDecimalism,char* chrPtBinaryResult) //十进制转二进制
{
int num = Chr1ToInt(chrPtDecimalism), index = 0;
char chr1Tmp[16];
while (num)
{
chr1Tmp[index ++] = num % 2 + 48;
num /= 2;
}
if (!index)
{
chr1Tmp[0] = '0';
index = 1;
}
for(-- index; index = 0; chrPtBinaryResult ++, index --)
*chrPtBinaryResult = chr1Tmp[index];
*chrPtBinaryResult = '\0';
}
void Calculator::DecimalismToHexadecimal(const char* chrPtDecimalism,char* chrPtHexadecimalResult) //十进制转十六进制
{
int num = Chr1ToInt(chrPtDecimalism), index = 0, tmp;
char chr1Tmp[16];
while (num)
{
tmp = num % 16;
num /= 16;
switch (tmp)
{
case 10:
chr1Tmp[index ++] = 'A';
break;
case 11:
chr1Tmp[index ++] = 'B';
break;
case 12:
chr1Tmp[index ++] = 'C';
break;
case 13:
chr1Tmp[index ++] = 'D';
break;
case 14:
chr1Tmp[index ++] = 'E';
break;
case 15:
chr1Tmp[index ++] = 'F';
break;
default:
chr1Tmp[index ++] = tmp + 48;
}
}
if (!index)
{
chr1Tmp[0] = '0';
index = 1;
}
for(-- index; index = 0; chrPtHexadecimalResult ++, index --)
*chrPtHexadecimalResult = chr1Tmp[index];
*chrPtHexadecimalResult = '\0';
}
void Calculator::HexadecimalToDecimalism(const char* chrPtHexadecimal,char* chrPtDecimalismResult) //十六进制转十进制
{
int x, index, NumTmp = 0;
const char* chrPt = chrPtHexadecimal + strlen(chrPtHexadecimal) - 1;
char chr1Tmp[4];
for ( x = 0; chrPt chrPtHexadecimal; chrPt --)
{
switch (*chrPt)
{
case 'a':
case 'A':
NumTmp += 10 * (int)pow(16, x ++);
break;
case 'b':
case 'B':
NumTmp += 11 * (int)pow(16, x ++);
break;
case 'c':
case 'C':
NumTmp += 12 * (int)pow(16, x ++);
break;
case 'd':
case 'D':
NumTmp += 13 * (int)pow(16, x ++);
break;
case 'e':
case 'E':
NumTmp += 14 * (int)pow(16, x ++);
break;
case 'f':
case 'F':
NumTmp += 15 * (int)pow(16, x ++);
break;
default:
NumTmp += (*chrPt - 48) * (int)pow(16, x ++);
}
}
switch (*chrPt)
{
case 'a':
case 'A':
NumTmp += 10 * (int)pow(16, x);
break;
case 'b':
case 'B':
NumTmp += 11 * (int)pow(16, x);
break;
case 'c':
case 'C':
NumTmp += 12 * (int)pow(16, x);
break;
case 'd':
case 'D':
NumTmp += 13 * (int)pow(16, x);
break;
case 'e':
case 'E':
NumTmp += 14 * (int)pow(16, x);
break;
case 'f':
case 'F':
NumTmp += 15 * (int)pow(16, x);
break;
default:
NumTmp += (*chrPt - 48) * (int)pow(16, x ++);
}
for (index = 0; NumTmp; index ++)
{
chr1Tmp[index] = NumTmp % 10 + 48;
NumTmp /= 10;
}
if (!index)
{
chr1Tmp[0] = '0';
index = 1;
}
for (-- index; index = 0; chrPtDecimalismResult ++, index --)
*chrPtDecimalismResult = chr1Tmp[index];
*chrPtDecimalismResult = '\0';
}
void Calculator::HexadecimalToOctonary(const char* chrPtHexadecimal,char* chrPtOctonaryResult) //十六进制转八进制
{
char chr1Tmp[6];
HexadecimalToDecimalism(chrPtHexadecimal, chr1Tmp); //先将十六进制转化为十进制
DecimalismToOctonary(chr1Tmp, chrPtOctonaryResult); //再将十进制转化为八进制
}
void Calculator::HexadecimalToBinary(const char* chrPtHexadecimal,char* chrPtBinaryResult) //十六进制转二进制
{
char chr1Tmp[6];
HexadecimalToDecimalism(chrPtHexadecimal, chr1Tmp); //先将十六进制转化为十进制
DecimalismToBinary(chr1Tmp, chrPtBinaryResult); //再将十进制转化为二进制
}
int main()
{
Calculator cal;
cal.UI();
return 0;
}
求C语言600行的学生管理系统源程序
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*其它说明*/
#include "string.h" /*字符串函数*/
#include "conio.h" /*屏幕操作函数*/
#include "mem.h" /*内存操作函数*/
#include "ctype.h" /*字符操作函数*/
#include "alloc.h" /*动态地址分配函数*/
#define N 3 /*定义常数*/
typedef struct z1 /*定义数据结构*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函数原型*/
STUDENT *init(); /*初始化函数*/
STUDENT *create(); /*创建链表*/
STUDENT *delete(STUDENT *h); /*删除记录*/
void print(STUDENT *h); /* 显示所有记录*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *insert(STUDENT *h); /*插入记录*/
void append(); /*追加记录*/
void copy(); /*复制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分类合计*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break; /*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:head=delete(head);break; /*删除记录*/
case 3:print(head);break; /*显示全部记录*/
case 4:search(head);break; /*查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=insert(head); break; /*插入记录*/
case 9:copy();break; /*复制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加记录*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分类合计*/
case 14:exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 0. init list", /*初始化*/
" 1. Enter list", /*输入记录*/
" 2. Delete a record from list", /*从表中删除记录*/
" 3. print list ", /*显示单链表中所有记录*/
" 4. Search record on name", /*按照姓名查找记录*/
" 5. Save the file", /*将单链表中记录保存到文件中*/
" 6. Load the file", /*从文件中读入记录*/
" 7. compute the score", /*计算所有学生的总分和均分*/
" 8. insert record to list ", /*插入记录到表中*/
" 9. copy the file to new file", /*复制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加记录到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分类合计*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,25); /*移动光标*/
printf("press any key enter menu......\n"); /*压任一键进入主菜单*/
getch(); /*输入任一键*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{
printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c0||c14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info-no,11); /*输入学号并校验*/
if(info-no[0]=='@') break; /*如果学号首字符为@则结束输入*/
inputs("enter name:",info-name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;iN;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",info-score[i]); /*输入成绩*/
if(info-score[i]100||info-score[i]0) /*确保成绩在0~100之间*/
printf("bad data,repeat input\n"); /*出错提示信息*/
}while(info-score[i]100||info-score[i]0);
s=s+info-score[i]; /*累加各门课程成绩*/
}
info-sum=s; /*将总分保存*/
info-average=(float)s/N; /*求出平均值*/
info-order=0; /*未排序前此值为0*/
info-next=h; /*将头结点做为新输入结点的后继结点*/
h=info; /*新输入结点为新的头结点*/
}
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); /*输入字符串*/
if(strlen(p)count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p-no,p-name,p-score[0],p-score[1],
p-score[2],p-sum,p-average,p-order);
p=p-next;
}
printf("**********************************end*********************************\n");
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11]; /*存放学号*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p-no,s)p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p-next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else /*p不为空,显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p-no,
p-name,p-score[0],p-score[1],p-score[2],p-sum,
p-average,p-order);
printf("********************************end*******************************\n");
getch(); /*压任一键后,开始删除*/
if(p==h) /*如果p==h,说明被删结点是头结点*/
h=p-next; /*修改头指针指向下一条记录*/
else
q-next=p-next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p); /*释放p所指结点空间*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
}
return(h); /*返回头指针*/
}
用c语言编写的一个小程序,200行以上,急!!!
C语言课程设计报告-------学生成绩简单管理程序一、系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息 (新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中(0)退出程序二、题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。功能2是显示所有的记录,通过循环输出,格式也比较重要。功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。功能6的算法在5中就已经体现了,输入姓名,一一比较。功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等。功能8和9是对文件的操作,提前准备好数据。三、程序正文部分#includestdio.h /*引用库函数*/#includestdlib.h#includectype.h#includestring.htypedef struct /*定义结构体数组*/{char num[10]; /*学号*/char name[20]; /*姓名*/int score; /*成绩*/}Student;Student stu[80]; /*结构体数组变量*/int menu_select() /*菜单函数*/{char c;do{system("cls"); /*运行前清屏*/printf("\t\t****Students' Grade Management System****\n"); /*菜单选择*/printf("\t\t | 1. Input Records |\n");printf("\t\t | 2. Display All Records |\n");printf("\t\t | 3. Sort |\n");printf("\t\t | 4. Insert a Record |\n");printf("\t\t | 5. Delete a Record |\n");printf("\t\t | 6. Query |\n");printf("\t\t | 7. Statistic |\n");printf("\t\t | 8. Add Records from a Text File|\n");printf("\t\t | 9. Write to a Text file |\n");printf("\t\t | 0. Quit |\n");printf("\t\t*****************************************\n");printf("\t\t\tGive your Choice(0-9):");c=getchar(); /*读入选择*/}while(c'0'||c'9');return(c-'0'); /*返回选择*/}int Input(Student stud[],int n) /*输入若干条记录*/{int i=0;char sign,x[10]; /*x[10]为清除多余的数据所用*/while(sign!='n'sign!='N') /*判断*/{ printf("\t\t\tstudent's num:"); /*交互输入*/scanf("\t\t\t%s",stud[n+i].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n+i].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",stud[n+i].score);gets(x); /*清除多余的输入*/printf("\t\t\tany more records?(Y/N)");scanf("\t\t\t%c",sign); /*输入判断*/i++;}return(n+i);}void Display(Student stud[],int n) /*显示所有记录*/{int i;printf("\t\t\t-----------------------------------\n"); /*格式头*/printf("\t\t\tnumber name score\n");printf("\t\t\t-----------------------------------\n");for(i=1;in+1;i++) /*循环输入*/{printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);if(i1i%10==0) /*每十个暂停*/{printf("\t\t\t-----------------------------------\n"); /*格式*/printf("\t\t\t");system("pause");printf("\t\t\t-----------------------------------\n");}}printf("\t\t\t");system("pause");}void Sort_by_num(Student stud[],int n) /*按学号排序*/{ int i,j,*p,*q,s;char t[10];for(i=0;in-1;i++) /*冒泡法排序*/for(j=0;jn-1-i;j++)if(strcmp(stud[j].num,stud[j+1].num)0){strcpy(t,stud[j+1].num);strcpy(stud[j+1].num,stud[j].num);strcpy(stud[j].num,t);strcpy(t,stud[j+1].name);strcpy(stud[j+1].name,stud[j].name);strcpy(stud[j].name,t);p=stud[j+1].score;q=stud[j].score;s=*p;*p=*q;*q=s;}}int Insert_a_record(Student stud[],int n) /*插入一条记录*/{char x[10]; /*清除多余输入所用*/printf("\t\t\tstudent's num:"); /*交互式输入*/scanf("\t\t\t%s",stud[n].num);printf("\t\t\tstudent's name:");scanf("\t\t\t%s",stud[n].name);printf("\t\t\tstudent's score:");scanf("\t\t\t%d",stud[n].score);gets(x);n++;Sort_by_num(stud,n); /*调用排序函数*/printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/return(n);}int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/{ char s[20];int i=0,j;printf("\t\t\ttell me his(her) name:"); /*交互式问寻*/scanf("%s",s);while(strcmp(stud[i].name,s)!=0in) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*返回失败信息*/return(n);}for(j=i;jn-1;j++) /*删除操作*/{strcpy(stud[j].num,stud[j+1].num);strcpy(stud[j].name,stud[j+1].name);stud[j].score=stud[j+1].score;}printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/return(n-1);}void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/{ char s[20];int i=0;printf("\t\t\tinput his(her) name:"); /*交互式输入*/scanf("\t\t\t%s",s);while(strcmp(stud[i].name,s)!=0in) i++; /*查找判断*/if(i==n){ printf("\t\t\tnot find!\n"); /*输入失败信息*/return;}printf("\t\t\this(her) number:%s\n",stud[i].num); /*输出该学生信息*/printf("\t\t\this(her) score:%d\n",stud[i].score);}void Statistic(Student stud[],int n) /*新增功能,输出统计信息*/{ int i,j=0,k=0,sum=0;float aver; /*成绩平均值*/for(i=0;in;i++) /*循环输入判断*/{sum+=stud[i].score;if(stud[j].scorestud[i].score) j=i;if(stud[k].scorestud[i].score) k=i;}aver=1.0*sum/n;printf("\t\t\tthere are %d records.\n",n); /*总共记录数*/printf("\t\t\tthe hignest score:\n"); /*最高分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);printf("\t\t\tthe lowest score:\n"); /*最低分*/printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/}int AddfromText(Student stud[],int n) /*从文件中读入数据*/{ int i=0,num;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename); /*输入文件名*/if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/{ printf("\t\t\tcann't open the file\n"); /*打开失败信息*/printf("\t\t\t");system("pause");return(n);}fscanf(fp,"%d",num); /*读入总记录量*/while(inum) /*循环读入数据*/{fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,stud[n+i].score);i++;}n+=num;fclose(fp); /*关闭文件*/printf("\t\t\tSuccessed!\n");printf("\t\t\t");system("pause");return(n);}void WritetoText(Student stud[],int n) /*将所有记录写入文件*/{int i=0;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/printf("\t\t\tWrite Records to a Text File\n"); /*输入文件名*/printf("\t\t\tInput the filename:");scanf("\t\t\t%s",filename);if((fp=fopen(filename,"w"))==NULL) /*打开文件*/{printf("\t\t\tcann't open the file\n");system("pause");return;}fprintf(fp,"%d\n",n); /*循环写入数据*/while(in){fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);i++;}fclose(fp); /*关闭文件*/printf("Successed!\n"); /*返回成功信息*/}void main() /*主函数*/{int n=0;for(;;){switch(menu_select()) /*选择判断*/{case 1:printf("\t\t\tInput Records\n"); /*输入若干条记录*/n=Input(stu,n);break;case 2:printf("\t\t\tDisplay All Records\n"); /*显示所有记录*/Display(stu,n);break;case 3:printf("\t\t\tSort\n");Sort_by_num(stu,n); /*按学号排序*/printf("\t\t\tSort Suceessed!\n");printf("\t\t\t");system("pause");break;case 4:printf("\t\t\tInsert a Record\n");n=Insert_a_record(stu,n); /*插入一条记录*/printf("\t\t\t");system("pause");break;case 5:printf("\t\t\tDelete a Record\n");n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/printf("\t\t\t");system("pause");break;case 6:printf("\t\t\tQuery\n");Query_a_record(stu,n); /*查找并显示一个记录*/printf("\t\t\t");system("pause");break;case 7:printf("\t\t\tStatistic\n");Statistic(stu,n); /*新增功能,输出统计信息*/printf("\t\t\t");system("pause");break;case 8:printf("\t\t\tAdd Records from a Text File\n");n=AddfromText(stu,n); /*新增功能,输出统计信息*/break;case 9:printf("\t\t\tWrite to a Text file\n");WritetoText(stu,n); /*循环写入数据*/printf("\t\t\t");system("pause");break;case 0:printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*结束程序*/printf("\t\t\t");system("pause");exit(0);}}}四、函数调用关系图注:“→”代表调用Input函数打印链表记录Display函数输入若干条记录menu_select()函数选择菜单Sort_by_num函数显示所有记录Delete_a_record函数按姓名查找,删除一条记录Query_a_record查找并显示一条记录Statistic函数输出统计信息 (新增)AddfromText函数从正文中添加数据到结构体数组中Main函数Insert_a_record插入一条记录WritetoText函数 将所有数据写入文件中退出程序Reverse(head)函数按学号排序五、设计测试流程1、进入界面2、输入选项1,回车;按提示输入数据:3、回到主菜单;输入选项7,回车;输入文件名:data.txt,回车;出现成功提示,则读入文件操作成功。4、回到主菜单,输入2,回车每10个暂停显示数据5、回到主菜单,输入3,回车出现排序成功信息。6、回到主菜单,输入4,回车按提示插入一组数据7、回到主菜单,输入5,回车按提示输入姓名,删除数据出现删除成功的信息8、回到主菜单,输入6,回车输入姓名进行查询9、回到主菜单,输入7,回车出现统计信息10、回到主菜单,输入9,回车输入result.txt,回车出现成功写入文件的信息11、回到主菜单,输入0,回车退出系统
找人帮我编一个600行的代码
给你一个,不过比你要求的少个一两百行把
也很简单的,你也有这能力完成这样的程序
老师会相信你的,下面是程序代码:
#include stdio.h
#include string.h
#define STU_NUM 3//学生数
#define SCORE_NUM 5//每个学生的科目数
typedef struct /*定义结构体数组*/
{
char num[20]; /*学号*/
int age; /*年龄*/
char name[20]; /*姓名*/
char sex[5]; /*性别*/
float score[SCORE_NUM]; /*成绩*/
float total;//总分
float average;//平均分
} Student;
Student stu[STU_NUM];
//输入学生信息
void input()
{
int i,j;
printf("请输入%d个学生的信息:\n",STU_NUM);
for(i=0;iSTU_NUM;i++)
{
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
printf("年龄:");
scanf("%d",stu[i].age);
printf("性别:",stu[i].sex);
scanf("%s",stu[i].sex);
for(j=0;jSCORE_NUM;j++)
{
printf("科目%d的成绩:",j+1);
scanf("%f",stu[i].score[j]);
}
}
}
//输出学生信息
void output(int i)
{
int j;
printf("学生的信息如下:\n");
printf("学号:%s",stu[i].num);
printf("姓名:%s",stu[i].name);
printf("年龄:%d",stu[i].age);
printf("性别:%s\n",stu[i].sex);
for(j=0;jSCORE_NUM;j++)
{
printf("科目%d:%f\n",j+1,stu[i].score[j]);
}
printf("总分:%f\n",stu[i].total);
printf("平均分:%f\n",stu[i].average);
}
//计算总分和平均分
void process()
{
int i,j;
for(i=0;iSTU_NUM;i++)
{
stu[i].total=0;
for(j=0;jSCORE_NUM;j++)
{
stu[i].total+=stu[i].score[j];
}
stu[i].average=stu[i].total/SCORE_NUM;
}
}
//排序并输出
void sort()
{
Student tStu;
int i,j;
for(i=0;iSTU_NUM;i++)
{
for(j=STU_NUM-1;ji;j--)
{
if(stu[j].totalstu[j-1].total)
{
tStu=stu[j];
stu[j]=stu[i];
stu[i]=tStu;
}
}
}
for(i=0;iSTU_NUM;i++)
{
output(i);
}
}
//根据学号查找
void find(char *no)
{
int i;
for(i=0;iSTU_NUM;i++)
{
if(strcmp(stu[i].num,no)==0)
{
output(i);
return;
}
}
printf("没有找到!\n");
}
void main()
{
input();
process();
sort();
find("1");
}
程序2:
/**********************
作者:***
日期:2007年7月9日
描述:学员成绩管理。
**********************/
#include stdio.h
#define N 50
int NUM;
int x; //全局变量
struct student //定义并声明结构变量
{
int number;
char name[20];
float score[3];
float ave;
}stu[N];
void suan(int );
void insert(int ); //录入学员信息
void display(struct student *p,int ); //显示信息
void paixu(struct student stu[],int ); //冒泡排序
void add(int ); //增加学员信息
void del(struct student *p,int ); //删除学员信息
void tui(int ); //退出系统
void main()
{
int i=0;
printf("\n\n=======================欢迎进行学员成绩管理系统=======================\n\n\n");
suan(x);
//增加
//调用函数
}
void suan(int i)
{
char x;
printf(" \n\n 1、输入学员信息 2、增加学员信息 3、删除学员信息 4、退出\n");
printf("\n请输入选项:");
scanf("%d",x);
switch (x)
{
case 1:
{
insert(i); //调用函数
break;
}
case 2:
{
add(NUM);
break;
}
case 3:
{
del(stu,NUM);
paixu(stu,NUM);
break;
}
case 4:
{
tui(NUM);
break;
}
default:
printf("\n输入有误\n\n");
}
}
void insert(int i)
{
int j;
float sum;
char ch;
do
{
sum=0;
printf("\n请输入学员信息:\n");
printf("\n学号:");
scanf("%d",stu[i].number);
printf("\n姓名:");
scanf("%s",stu[i].name);
printf("\n三门成绩:\n");
for (j=0;j3;j++)
{
printf("\n成绩%d:",j+1);
scanf("%f",stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].ave=sum/3;
i++;
printf("\n是否继续输入学员信息?(y/n)");
fflush(stdin);
ch=getchar();
}while(ch=='y' || ch=='Y');
printf("\n排序前学员信息:\n");
display(stu,i);
printf("\n排序后的学员信息如下:\n");
paixu(stu,i);
NUM=i;
suan(x);
}
void display(struct student *p,int n)
{
int i;
printf("\n学号\t姓名\t成绩:\n");
for (i=0;in;i++,p++)
{
printf("%d\t%s\t%lf\n",p-number,p-name,p-ave);
}
}
void paixu(struct student stu[],int n)
{
float temp;
int i,j;
for (i=0;in;i++)
{
for (j=0;jn-i-1;j++)
{
if (stu[j].avestu[j+1].ave)
{
temp=stu[j+1].ave;
stu[j+1].ave=stu[j].ave;
stu[j].ave=temp;
}
}
}
display(stu,n);
}
void add(int i)
{
char ch;
printf("\n是否需要插入新学员信息?(y/n)");
fflush(stdin);
ch=getchar();
if (ch=='y' || ch=='Y')
{
insert(i);
}
suan(x);
}
void del(struct student stu[],int n)
{
int num,i=0,j=0;
char ch;
printf("\n是否需要删除学员信息?(y/n)");
fflush(stdin);
ch=getchar();
while (ch=='y' ||ch=='Y')
{
printf("\n请输入删除学员的学号:");
scanf("%d",num);
for (i=0;in;i++)
{
if (num==stu[i].number)
break;
}
if (in)
{
for (j=i;jn;j++)
{
stu[j]=stu[j+1];
}
n--;
printf("\n删除后的学员信息如下:\n");
display(stu,n);
}
else
printf("\n对不起,没有这个学号!\n");
if (n==0)
break;
printf("\n是否要继续删除学员信息?(y/n)");
fflush(stdin);
ch=getchar();
}
suan(x);
}
void tui(int i)
{
char ch;
printf("\n退出?(y/n):");
fflush(stdin);
ch=getchar();
if (ch=='y' || ch=='Y')
{
printf("\n");
}
else
{
suan(x);
}
}
求一个用C语言编写的小游戏代码
#include graphics.h
#include conio.h
#include time.h
/////////////////////////////////////////////
// 定义常量、枚举量、结构体、全局变量
/////////////////////////////////////////////
#define WIDTH 10 // 游戏区宽度
#define HEIGHT 22 // 游戏区高度
#define SIZE 20 // 每个游戏区单位的实际像素
// 定义操作类型
enum CMD
{
CMD_ROTATE, // 方块旋转
CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动
CMD_SINK, // 方块沉底
CMD_QUIT // 退出游戏
};
// 定义绘制方块的方法
enum DRAW
{
SHOW, // 显示方块
HIDE, // 隐藏方块
FIX // 固定方块
};
// 定义七种俄罗斯方块
struct BLOCK
{
WORD dir[4]; // 方块的四个旋转状态
COLORREF color; // 方块的颜色
} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I
{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口
{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L
{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L
{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z
{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z
{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T
// 定义当前方块、下一个方块的信息
struct BLOCKINFO
{
byte id; // 方块 ID
char x, y; // 方块在游戏区中的坐标
byte dir:2; // 方向
} g_CurBlock, g_NextBlock;
// 定义游戏区
BYTE g_World[WIDTH][HEIGHT] = {0};
/////////////////////////////////////////////
// 函数声明
/////////////////////////////////////////////
void Init(); // 初始化游戏
void Quit(); // 退出游戏
void NewGame(); // 开始新游戏
void GameOver(); // 结束游戏
CMD GetCmd(); // 获取控制命令
void DispatchCmd(CMD _cmd); // 分发控制命令
void NewBlock(); // 生成新的方块
bool CheckBlock(BLOCKINFO _block); // 检测指定方块是否可以放下
void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块
void OnRotate(); // 旋转方块
void OnLeft(); // 左移方块
void OnRight(); // 右移方块
void OnDown(); // 下移方块
void OnSink(); // 沉底方块
/////////////////////////////////////////////
// 函数定义
/////////////////////////////////////////////
// 主函数
void main()
{
Init();
CMD c;
while(true)
{
c = GetCmd();
DispatchCmd(c);
// 按退出时,显示对话框咨询用户是否退出
if (c == CMD_QUIT)
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("您要退出游戏吗?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)
Quit();
}
}
}
// 初始化游戏
void Init()
{
initgraph(640, 480);
srand((unsigned)time(NULL));
// 显示操作说明
setfont(14, 0, _T("宋体"));
outtextxy(20, 330, _T("操作说明"));
outtextxy(20, 350, _T("上:旋转"));
outtextxy(20, 370, _T("左:左移"));
outtextxy(20, 390, _T("右:右移"));
outtextxy(20, 410, _T("下:下移"));
outtextxy(20, 430, _T("空格:沉底"));
outtextxy(20, 450, _T("ESC:退出"));
// 设置坐标原点
setorigin(220, 20);
// 绘制游戏区边界
rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);
rectangle((WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE);
// 开始新游戏
NewGame();
}
// 退出游戏
void Quit()
{
closegraph();
exit(0);
}
// 开始新游戏
void NewGame()
{
// 清空游戏区
setfillstyle(BLACK);
bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);
ZeroMemory(g_World, WIDTH * HEIGHT);
// 生成下一个方块
g_NextBlock.id = rand() % 7;
g_NextBlock.dir = rand() % 4;
g_NextBlock.x = WIDTH + 1;
g_NextBlock.y = HEIGHT - 1;
// 获取新方块
NewBlock();
}
// 结束游戏
void GameOver()
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("游戏结束。\n您想重新来一局吗?"), _T("游戏结束"), MB_YESNO | MB_ICONQUESTION) == IDYES)
NewGame();
else
Quit();
}
// 获取控制命令
DWORD m_oldtime;
CMD GetCmd()
{
// 获取控制值
while(true)
{
// 如果超时,自动下落一格
DWORD newtime = GetTickCount();
if (newtime - m_oldtime = 500)
{
m_oldtime = newtime;
return CMD_DOWN;
}
// 如果有按键,返回按键对应的功能
if (kbhit())
{
switch(getch())
{
case 'w':
case 'W': return CMD_ROTATE;
case 'a':
case 'A': return CMD_LEFT;
case 'd':
case 'D': return CMD_RIGHT;
case 's':
case 'S': return CMD_DOWN;
case 27: return CMD_QUIT;
case ' ': return CMD_SINK;
case 0:
case 0xE0:
switch(getch())
{
case 72: return CMD_ROTATE;
case 75: return CMD_LEFT;
case 77: return CMD_RIGHT;
case 80: return CMD_DOWN;
}
}
}
// 延时 (降低 CPU 占用率)
Sleep(20);
}
}
// 分发控制命令
void DispatchCmd(CMD _cmd)
{
switch(_cmd)
{
case CMD_ROTATE: OnRotate(); break;
case CMD_LEFT: OnLeft(); break;
case CMD_RIGHT: OnRight(); break;
case CMD_DOWN: OnDown(); break;
case CMD_SINK: OnSink(); break;
case CMD_QUIT: break;
}
}
// 生成新的方块
void NewBlock()
{
g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7;
g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;
g_CurBlock.x = (WIDTH - 4) / 2;
g_CurBlock.y = HEIGHT + 2;
// 下移新方块直到有局部显示
WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
while((c 0xF) == 0)
{
g_CurBlock.y--;
c = 4;
}
// 绘制新方块
DrawBlock(g_CurBlock);
// 绘制下一个方块
setfillstyle(BLACK);
bar((WIDTH + 1) * SIZE, 0, (WIDTH + 5) * SIZE - 1, 4 * SIZE - 1);
DrawBlock(g_NextBlock);
// 设置计时器,用于判断自动下落
m_oldtime = GetTickCount();
}
// 画方块
void DrawBlock(BLOCKINFO _block, DRAW _draw)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
int color = BLACK;
switch(_draw)
{
case SHOW: color = g_Blocks[_block.id].color; break;
case HIDE: color = BLACK; break;
case FIX: color = g_Blocks[_block.id].color / 3; break;
}
setfillstyle(color);
for(int i=0; i16; i++)
{
if (b 0x8000)
{
x = _block.x + i % 4;
y = _block.y - i / 4;
if (y HEIGHT)
{
if (_draw != HIDE)
bar3d(x * SIZE + 2, (HEIGHT - y - 1) * SIZE + 2, (x + 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);
else
bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x + 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);
}
}
b = 1;
}
}
// 检测指定方块是否可以放下
bool CheckBlock(BLOCKINFO _block)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
for(int i=0; i16; i++)
{
if (b 0x8000)
{
x = _block.x + i % 4;
y = _block.y - i / 4;
if ((x 0) || (x = WIDTH) || (y 0))
return false;
if ((y HEIGHT) (g_World[x][y]))
return false;
}
b = 1;
}
return true;
}
// 旋转方块
void OnRotate()
{
// 获取可以旋转的 x 偏移量
int dx;
BLOCKINFO tmp = g_CurBlock;
tmp.dir++; if (CheckBlock(tmp)) { dx = 0; goto rotate; }
tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }
tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }
tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }
tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }
return;
rotate:
// 旋转
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.dir++;
g_CurBlock.x += dx;
DrawBlock(g_CurBlock);
}
// 左移方块
void OnLeft()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x--;
DrawBlock(g_CurBlock);
}
}
// 右移方块
void OnRight()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x++;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x++;
DrawBlock(g_CurBlock);
}
}
// 下移方块
void OnDown()
{
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.y--;
DrawBlock(g_CurBlock);
}
else
OnSink(); // 不可下移时,执行“沉底方块”操作
}
// 沉底方块
void OnSink()
{
int i, x, y;
// 连续下移方块
DrawBlock(g_CurBlock, HIDE);
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
while (CheckBlock(tmp))
{
g_CurBlock.y--;
tmp.y--;
}
DrawBlock(g_CurBlock, FIX);
// 固定方块在游戏区
WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
for(i = 0; i 16; i++)
{
if (b 0x8000)
{
if (g_CurBlock.y - i / 4 = HEIGHT)
{ // 如果方块的固定位置超出高度,结束游戏
GameOver();
return;
}
else
g_World[g_CurBlock.x + i % 4][g_CurBlock.y - i / 4] = 1;
}
b = 1;
}
// 检查是否需要消掉行,并标记
int row[4] = {0};
bool bRow = false;
for(y = g_CurBlock.y; y = max(g_CurBlock.y - 3, 0); y--)
{
i = 0;
for(x = 0; x WIDTH; x++)
if (g_World[x][y] == 1)
i++;
if (i == WIDTH)
{
bRow = true;
row[g_CurBlock.y - y] = 1;
setfillstyle(WHITE, DIAGCROSS2_FILL);
bar(0, (HEIGHT - y - 1) * SIZE + SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE + SIZE / 2 + 2);
}
}
if (bRow)
{
// 延时 200 毫秒
Sleep(200);
// 擦掉刚才标记的行
IMAGE img;
for(i = 0; i 4; i++)
{
if (row[i])
{
for(y = g_CurBlock.y - i + 1; y HEIGHT; y++)
for(x = 0; x WIDTH; x++)
{
g_World[x][y - 1] = g_World[x][y];
g_World[x][y] = 0;
}
getimage(img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i + 1)) * SIZE);
putimage(0, SIZE, img);
}
}
}
// 产生新方块
NewBlock();
}
求一个c语言制作的小游戏或者小软件,行数不小于600,挺急的
贪吃蛇代码
#include stdio.h
#include graphics.h
#include stdlib.h
#include dos.h /*引用的库函数*/
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b/*宏定义键名*/
#define N 200
int i,key;
int level;/*游戏等级*/
int score=0;/*得分*/
int gamespeed;/*游戏速度*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;/*蛇的结构体*/
void Choicelevle(void);/*选择游戏等级*/
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DRAW(void);/*游戏区域*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
Choicelevle();/*选择游戏等级*/
DRAW();/*游戏区域*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(gd,gm,"\\turboc2"); /*初始化图形系统*/
cleardevice(); /*清除图形界面*/
}
/*选择游戏等级*/
void Choicelevle(void)
{char name[20];
setcolor(YELLOW);
settextstyle(0,0,6);
outtextxy(150,150,"Snake");
setcolor(GREEN);
settextstyle(0,0,1);
outtextxy(200,250,"please put in your English name:");
outtextxy(200,270,"Choice levle from 1-9.");
outtextxy(300,320,"name:yangzilong");/*制作人姓名*/
outtextxy(300,350,"number:0902060226");/*制作人学号*/
outtextxy(300,380,"class:computer science 0602");/*制作人班级*/
getch();
printf("please putin your name:");
gets(name);
printf("please choice levle:");
scanf("%d",level);
gamespeed=100000-400*level-300*level*level;
if(level9||level1)
{cleardevice(); /*清除图形界面*/
setcolor(YELLOW); /*设置字体颜色*/
settextstyle(0,0,2); /*设置字体类型*/
outtextxy(150,200,"level input error"); /*显示文本*/
getch();
level=1;
}
}
void DRAW(void)
{cleardevice(); /*清屏*/
setcolor(2);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
rectangle(45,45,465,325);
}
/*玩游戏具体过程*/
void GamePlay(void)
{setcolor(5);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x[0]=320;snake.y[0]=240;/*蛇头*/
snake.x[1]=330;snake.y[1]=240; /*蛇的第二节位置*/
snake.node=3;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%360+70;
food.y=rand()%250+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/
switch(snake.direction)
{
case 1: snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])
{
GameOver();/*显示失败*/
snake.life=1; /*蛇死*/
break;
}
}
/*如果蛇头碰到墙壁,蛇头从对面墙出来*/
if(snake.x[0]50)
{snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/
snake.y[0]=snake.y[0];/*纵坐标不变*/
for(i=snake.node-1;i0;i--)
{snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/
}
{
setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是表示填充的范围的函数*/
}
}
else
if(snake.x[0]450)
{snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/
snake.y[0]=snake.y[0];/*纵坐标不变*/
for(i=snake.node-1;i0;i--)
{snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/
}
{
setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是表示填充的范围的函数*/
}
}
else
if(snake.y[0]60)
{snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/
snake.x[0]=snake.x[0];/*横坐标不变*/
for(i=snake.node-1;i0;i--)
{snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/
}
{
setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是表示填充的范围的函数*/
}
}
else
if(snake.y[0]320)
{snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/
snake.x[0]=snake.x[0];/*横坐标不变*/
for(i=snake.node-1;i0;i--)
{snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/
}
{
setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/
bar(50,55,455,315);/*bar是表示填充的范围的函数*/
}
}
if(snake.life==1)/*如果蛇死就跳出内循环,重新开始*/
break;
if(snake.x[0]==food.xsnake.y[0]==food.y)/*吃到食物以后*/
{
setcolor(0);/*把画面上的食物东西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10); /*用当前线型和颜色画一矩形*/
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++;/*蛇的身体长一节*/
food.yes=1;/*画面上需要出现新的食物*/
score+=10; /*每吃掉一食物,得分累加10分*/
if(score%100==0)
{level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/
PrScore();/*输出新得分*/
setcolor(YELLOW); /*设置字体颜色*/
settextstyle(0,0,4); /*设置字体类型*/
outtextxy(150,200,"LEVEL UP"); /*显示文本*/
if(level==10)
{level=1,gamespeed=100000-400*level-300*level*level;}
delay(6000000);
delay(6000000);
delay(6000000);
delay(6000000);
delay(6000000);
delay(6000000);
delay(6000000);
bar(50,55,455,315);/*bar是表示填充的范围的函数*/
}
PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;isnake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed); /*控制游戏速度*/
setcolor(0);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/ /*用黑色去除蛇的的最后一节*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
else
if(key==UPsnake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
else
if(key==RIGHTsnake.direction!=2)
snake.direction=1;
else
if(key==LEFTsnake.direction!=1)
snake.direction=2;
else
if(key==DOWNsnake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice(); /*清屏*/
PrScore();
setcolor(RED); /*设置字体颜色*/
settextstyle(0,0,4); /*设置字体类型*/
outtextxy(200,200,"GAME OVER"); /*显示文本*/
getch();
}
/*输出成绩及游戏等级*/
void PrScore(void)
{
char str1[20];/*设置字符型数组*/
setfillstyle(SOLID_FILL,0);
bar(50,15,390,35); /*填充矩形框*/
setcolor(6); /*设置文本颜色*/
settextstyle(0,0,2); /*设置数组显示位置*/
sprintf(str1,"score %d level %d",score,level);/*显示数组内容*/
outtextxy(55,20,str1);
setcolor(YELLOW); /*设置字体颜色*/
settextstyle(0,0,2); /*设置字体类型*/
outtextxy(250,400,"EXIT=ESC ");/*显示文本*/
}
void Close(void)
{
closegraph();
}