王爽语言课程设计一代码

时间:2019-05-12 16:50:58下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《王爽语言课程设计一代码》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《王爽语言课程设计一代码》。

第一篇:王爽语言课程设计一代码

assume cs:code data segment;0-83H db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991' ,'1992' db '1993','1994','1995'

;84H-0a7h dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

dd 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dd 11542,14430,15257,17800 data ends

b segment db 32 dup(0)b ends

stack segment dw 32 dup(0)stack ends

code segment start:

mov ax,data

;init ds,ss

mov ds,ax

mov ax,stack

mov ss,ax

mov sp,32

;bx--第几组 si--年份,人数,雇员

di--显示位置

mov bx,0

mov si,0

mov di,0

mov cx,21 lp:

push cx

;-------------------------

;年份

mov cx,4;内循环次数

mov si,bx

call show_str

;-------------------------

;-------------------------

;收入

mov si,bx

add si,84

;si指向下一个段

call dtoc

push ax

;

push ds

push si

push di

mov ax,b

mov ds,ax

mov si,0

add di,40

call show_str

pop di

pop si

pop ds

pop ax

;-------------------------

;-------------------------

;收入

mov si,bx

add si,84

add si,84

;pointer to employee 当employee定义为dd时,才能如此寻址,dw时,寻址不正确

call dtoc2

push ax

;pointer to data src

push dx

push si

push di

mov ax,b

mov ds,ax

mov si,0

add di,80

call show_str

pop di

pop si

pop ds

pop ax

jmp mcon

;-------------------------

help:

jmp lp

;-------------------------

;平均

mcon:

mov ax,data

mov ds,ax

mov si,bx

;初始化 num1

add si,84

mov ax,ds:[si]

add si,2

mov dx,ds:[si]

mov si,bx

;初始化 num2

add si,84

add si,84

;当employee定义为dd时,才能如此寻址,dw时,寻址不正确

mov cx,ds:[si]

call divdw

push ds

;存放结果

push si

push di

push cx

push ax

mov ax,b

mov ds,ax

mov si,0

pop ax

mov ds:[si],ax

add si,2

;inc si ?

mov ds:[si],dx

mov si,0

call dtoc

add di,120

;显示结果

call show_str

pop cx

pop di

pop si

pop ds

;-------------------------

add di,160

;inc bx

add bx,4

pop cx

loop help

mov ax,4c00H

int 21H

;主函数结束

;---------------;-dtoc2

-;-params ds,si--src num(num1 16 bit)

-;-return B Segment save num cx--num Length

-;---------------dtoc2:

push ds

push si

push ax

push bx

dc2:

mov bx,0

;save length

mov ax,ds:[si]

;初始化 num1

mov dx,0 dccon2:

mov cx,10

;初始化 num2

call divdw

add cx,30H

push cx

;save extra

inc bx

push ax

or ax,dx

mov cx,ax

pop ax

jcxz dcok2

jmp dccon2

dcok2:

mov cx,bx

mov ax,b

mov ds,ax

mov si,0 dcsav2:

pop ds:[si]

inc si

loop dcsav2

mov cx,bx

;result cx--length

pop bx

pop ax

pop si

pop ds

ret

;---------------;-dtoc

-;-params ds,si--src num(num1 32 bit)

;-params cx--length of str ds,si--src di--destination pos

-;---------------show_str: push es

push ax

push si

push di

push bx

push cx

mov ax,0b800H;显存地址

mov es,ax

mov bl,7

;颜色

sstr:

mov al,ds:[si]

mov es:[di],al

inc di

mov es:[di],bl

inc di

inc si

loop sstr

pop cx

pop bx

pop di

pop si

pop ax

pop es

ret

;---------------;-除法函数

;-余数--cx

-;---------------divdw: push bx

ddw:

push ax

mov ax,dx

mov dx,0

div cx;商在ax中、余数在dx中

mov bx,ax

pop ax

div cx

mov cx,dx

mov dx,bx

pop bx

ret

code ends end start

第二篇:C语言课程设计代码

#include “stdio.h” #include #include #define LEN sizeof(struct course)struct course { int cID;char name[50];float credit;int semester;struct course *next;};

void main(){ int n=0;struct course *head=NULL;void insert(struct course **head,struct course *cou);void Print(struct course **head,int *n);void Modify(struct course **head,int *n);void Require(struct course **head);void Creat(struct course **head,int *n);void Delete(struct course **head,int *n);void Fun(struct course **head,int *n);

Fun(&head,&n);}

void insert(struct course **head,struct course *cou){ struct course *p0,*p1,*p2;p2=p1=*head;p0=cou;if(*head){

while((p0->semester>p1->semester)&&(p1->next))

{

p2=p1;

p1=p1->next;

}

if(p0->semester

semester)

{

if(*head==p1)*head=p0;

else p2->next=p0;

p0->next=p1;}

else

{

if(p0->semester==p1->semester){ while((p0->cID>p1->cID)&&(p1->next)&&(p0->semester==p1->semester))

{

} if(p0->semester!=p1->semester){

} else {

if(p0->cID<=p1->cID){

if(*head==p1)*head=p0;else p2->next=p0;p2=p1;p1=p1->next;p2->next=p0;p0->next=p1;

p0->next=p1;

}

else

{p1->next=p0;p0->next=NULL;}

}

}

else

{p1->next=p0;p0->next=NULL;}

} } else

{

*head=p0;

p0->next=NULL;} }

void Print(struct course **head,int *n){ struct course *p;p=*head;if(*head){

if(*n==1)printf(“nThis %d record is:n”,*n);

else printf(“nThese %d records are:n”,*n);

printf(“semester cID

name

creditn”);

do

{ printf(“%-10d%-10d%-18s%-12.1f n”,p->semester,p->cID,p->name,p->credit);

p=p->next;

}while(p!=NULL);} else printf(“nList null!n”);}

void Modify(struct course **head,int *n){ struct course *p,*p2;int cID;if(*head){

Print(head,n);while(1){ printf(“nPlease input the cID which you want to modify:”);

scanf(“%d”,&cID);p2=p=*head;while(p->next&&(cID!=p->cID)){

p2=p;

p=p->next;} if(cID==p->cID){

printf(“Please input the new cID(1~60):”);

scanf(“%d”,&p->cID);

while(p->cID<0||p->cID>60)

{

printf(“nError!”);

printf(“nPlease input the new cID(1~60):”);

scanf(“%d”,&p->cID);

}

printf(“Please input the new semester(1~8):”);

scanf(“%d”,&p->semester);while(p->semester<0||p->semester>8)

{

printf(“nError!”);

printf(“nPlease input the new semester(1~8):”);

scanf(“%d”,&p->semester);

}

printf(“Please input the new credit:”);

scanf(“%f”,&p->credit);

printf(“Please input the new name:”);

scanf(“%s”,p->name);

if(p==*head)*head=p->next;

else p2->next=p->next;

insert(head,p);

break;

}

else printf(“%d not been found!n”,cID);

} } else {printf(“nList null!n”);} }

void Require(struct course **head){ struct course *p;float sum=0;int sem,i=0;printf(“nPlease input the semester which is required:”);

scanf(“%d”,&sem);p=*head;while(p){

if(sem==p->semester)

{

i++;if(i==1)printf(“nsemester cID

name

creditn”);printf(“%-10d%-10d%-18s%-12.1f n”,p->semester,p->cID,p->name,p->credit);

sum=sum+p->credit;

}

p=p->next;} printf(“The sum of credit in this term is:%.1fn”,sum);}

void Creat(struct course **head,int *n){ struct course *p1;while(1){

p1=(struct course *)malloc(LEN);

printf(“Please input the cID(1~60):”);

scanf(“%d”,&p1->cID);

while(p1->cID<0||p1->cID>60)

{

printf(“nError!”);

printf(“nPlease input the cID(1~60):”);

scanf(“%d”,&p1->cID);

}

if(p1->cID==0)break;

printf(“Please input the semester(1~8):”);

scanf(“%d”,&p1->semester);

while(p1->semester<0||p1->semester>8)

{

printf(“nError!”);

printf(“nPlease input the semester(1~8):”);scanf(“%d”,&p1->semester);

}

} } printf(“Please input the credit:”);scanf(“%f”,&p1->credit);printf(“Please input the name:”);scanf(“%s”,p1->name);insert(head,p1);*n=*n+1;printf(“nYou can continue until the cID is ”0“!n”);Print(head,n);void Delete(struct course **head,int *n){

struct course *p1,*p2;int cID;Print(head,n);if(*head){ printf(“Please input the cID of the course which you want to delete:”);scanf(“%d”,&cID);p1=*head;

while(cID!=p1->cID&&p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(cID==p1->cID)

{

if(p1==*head)*head=p1->next;

else p2->next=p1->next;

printf(“Have delete cID:%dn”,cID);

*n=*n-1;

}

else printf(“%d not been found!n”,cID);} }

void Fun(struct course **head,int *n){ char num;

while(1)

{

system(“cls”);

puts(“**************** Main Menu ******************”);

puts(“* 1.Add Records

2.Print Records

*”);

puts(“* 3.Delete Records

4.Modify Records *”);

puts(“* 5.Require Records 6.Exit

*”);

printf(“Please input your choice: ”);

scanf(“%d”,&num);

switch(num)

{

case 1:Creat(head,n);break;

case 2:Print(head,n);break;

case 3:Delete(head,n);break;

case 4:Modify(head,n);break;

case 5:Require(head);break;case 6:exit(0);break;

default: break;

}

printf(“nPress ”Enter“ to continue!”);getchar();getchar();

} }

第三篇:C语言课程设计《高速公路联网收费系统》代码

作者:吴侠志

就读院校:东莞理工学院

#include “stdafx.h” #define NUM 4 #define max_len 8 #include #include #include #include #include #include

char *mytime(struct tm *timeptr);

//获取系统时间的函数 void Delay(int n);//延时函数 char *filename(int startkey);void initialize(struct car *cars,int num,FILE *fp);///初始化函数 int refer(struct car *cars,int startkey);//查询

int km[10]={0,0,82,162,288,368,391,514,800,867};

/* 记录各站与首站的里程,单位:km */ double price[6]={0.0,0.6,1.2,1.8,2.4,3.0};

/* 记录各类车的里程价位,单位:元/辆公里 */ char *address[10]={“0”,“湛江”,“茂名”,“阳江”,“开平”,“佛山”,“广州”,“深圳”,“汕头”,“汾水”};char *kind[6]={“特殊车”,“一类车”,“二类车”,“三类车”,“四类车”,“五类车”};

struct car { int card_num;

/* 卡号 */ int car_type;int station_in;char time_in[26];int station_out;char time_out[26];char is_in;double money;int flag;}cars[9*NUM+1];

int num=0;int pass=0;int main(int argc, char* argv[]){ int i,key,choice,j,k,m,size;double pay,money;char enter,pwd[max_len+1],password[max_len+1],ch;FILE *fp;fp=fopen(“标记.txt”,“a+”);fclose(fp);

fp=fopen(“记录.txt”,“a+”);

fclose(fp);

printf(“t欢迎登录广东同三高速公路联网收费系统n”);printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃

1.湛江

2.茂名

3.阳江

┃n”);printf(“┃

4.开平

5.佛山

6.广州

┃n”);printf(“┃

7.深圳

8.汕头

9.汾水关

┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择所在站点,并输入该序号:”);int startkey;while(1){

fflush(stdin);

while(scanf(“%d%c”,&startkey,&enter)==0 || enter!='n')

{

printf(“terror!!input again:”);

fflush(stdin);

}

if(startkey==1 || startkey==2 || startkey==3 || startkey==4 || startkey==5 || startkey==6 || startkey==7 || startkey==8 || startkey==9)

{

break;

}

else

{

printf(“terror!!input again:”);

continue;

} } printf(“初始化中……”);

fp=fopen(“标记.txt”,“a+”);fscanf(fp,“%d”,&num);fclose(fp);

fp=fopen(“password.txt”,“a+”);fscanf(fp,“%d”,&pass);fclose(fp);if(pass==0)

{

} fp=fopen(“password.txt”,“w+”);fprintf(fp,“%d”,88888888);fclose(fp);

fp=fopen(“记录.txt”,“a+”);rewind(fp);initialize(cars,num,fp);

fclose(fp);Delay(5);time_t timer;struct tm *tblock,*a;timer=time(NULL);a=localtime(&timer);while(1){ system(“cls”);fflush(stdin);printf(“所在地:%s站n登录时间:%sn”,address[startkey],mytime(a));printf(“┏━━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃

1.发卡

┃n”);printf(“┃

2.检卡并收费

┃n”);printf(“┃

3.查询

┃n”);printf(“┃

4.注销并退出系统

┃n”);printf(“┃

5.退出系统

┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择,并输入序号:”);while(1){

while(scanf(“%d%c”,&key,&enter)==0 || enter!='n')

{

printf(“terror!!input again:”);

fflush(stdin);

}

fp=fopen(“标记.txt”,“r+”);

fscanf(fp,“%d”,&num);

fclose(fp);

fp=fopen(“记录.txt”,“r+”);

rewind(fp);

initialize(cars,num,fp);

fclose(fp);

j=0;

for(i=1;i<=9*NUM;i++){

if(cars[i].is_in=='y' && cars[i].station_in!=startkey && cars[i].station_out==0)

{

j++;

break;

} } k=0;for(m=1;m<=9*NUM;m++){

if(cars[m].is_in=='n' && cars[m].station_in==0 && cars[m].station_out==startkey)

{

k++;

cars[m].flag=k;

} } if((key==1 && k>0)||(key==2 && j>0)|| key==3 || key==4 || key==5)break;else if(key==2 && j==0){

printf(“t目前尚无车辆要离站!!input again:”);

fflush(stdin);

continue;} else if(key==1 && k==0){

printf(“t目前卡片不足!!input again:”);

fflush(stdin);

continue;} else {

printf(“terror!!input again:”);

fflush(stdin);

continue;} } if(key==1){ system(“cls”);timer=time(NULL);tblock=localtime(&timer);srand((unsigned)time(NULL));//用即时的系统时间来做随机数种子.生成随机数

choice=(rand()%k)+1;//随机生成choice,格式rand()%k即要求产生k以内的

for(m=1;m<=9*NUM;m++)

{

if(cars[m].is_in=='n' && cars[m].station_in==0 && cars[m].station_out==startkey && cars[m].flag==choice)

{

break;

}

}

printf(“卡号是:%dn现在时间是:%sn”,m,mytime(tblock));

cars[m].station_in=startkey;

cars[m].station_out=0;

strcpy(cars[m].time_in,mytime(tblock));

strcpy(cars[m].time_out,“无”);

num=1;

fp=fopen(“标记.txt”,“w+”);

fprintf(fp,“%d”,num);

fclose(fp);

fp=fopen(“记录.txt”,“w+”);

for(i=1;i<=9*NUM;i++)

{

fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);

}

fclose(fp);

printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”);

printf(“┃0.特殊车:军警车、紧急车

┃n”);

printf(“┃1.一类车:小轿车、吉普车、的士头人货车、摩托车

┃n”);

printf(“┃2.二类车:面包车、小型人货车、轻型货车、小型客车

┃n”);

printf(“┃3.三类车:中型客车、大型普通客车、中型货车、大型豪华客车┃n”);

printf(“┃4.四类车: 大型货车、大型拖(挂)车、20英尺集装箱车

┃n”);

printf(“┃5.五类车: 重型货车、重型拖(挂)车、40英尺集装箱车

┃n”);

printf(“┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛n”);

printf(“请选择车型,并输入序号:”);

while(1)

{

fflush(stdin);

while(scanf(“%d%c”,&size,&enter)==0 || enter!='n')

{

printf(“terror!!input again:”);

fflush(stdin);

}

if(size==0 || size==1 || size==2 || size==3 || size==4 || size==5)break;

else

{

printf(“terror!!input again:”);

continue;

}

}

cars[m].is_in='y';

cars[m].car_type=size;

fp=fopen(filename(startkey),“a+”);

fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),m,kind[cars[m].car_type],“发卡,放行”);

fclose(fp);

fp=fopen(“标记.txt”,“w+”);

fprintf(fp,“%d”,num);

fclose(fp);

fp=fopen(“记录.txt”,“w+”);

for(i=1;i<=9*NUM;i++)

{

fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);

}

fclose(fp);

printf(“登记完毕,请发卡放行,并按任意键回到主菜单a”);

getche();

}

else if(key==2)

{

system(“cls”);

printf(“请输入卡号(按0返回):”);

while(1)

{

ch='y';

fflush(stdin);

while(scanf(“%d%c”,&choice,&enter)==0 || enter!='n')

{

printf(“terror!!input again:”);

fflush(stdin);

}

fp=fopen(“标记.txt”,“r+”);

fscanf(fp,“%d”,&num);

fclose(fp);

fp=fopen(“记录.txt”,“r+”);

rewind(fp);

initialize(cars,num,fp);

fclose(fp);

if(choice<0 || choice>9*NUM)

{

printf(“无此卡号...ntinput again:”);

continue;

}

else if(choice==0)

{

ch='n';

break;

}

else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='n')

{

printf(“该卡号尚未发布...ntinput again:”);

continue;

}

else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='y' && cars[choice].station_in!=startkey && cars[choice].station_out==0)

{

break;

}

else if(choice>0 && choice<=9*NUM && cars[choice].is_in=='y' && cars[choice].station_in==startkey && cars[choice].station_out==0)

{

printf(“该卡号车于%s从本站进入高速,尚在行...ntinput again:”,cars[choice].time_in);

continue;

}

else

{

printf(“terror!!input again:”);

continue;

}

}

if(ch=='n')continue;

cars[choice].station_out=startkey;

fp=fopen(“记录.txt”,“w+”);

for(i=1;i<=9*NUM;i++)

{

fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);

}

fclose(fp);

if(cars[choice].car_type==0)

{

printf(“该车于%s在%s进入高速,为特殊车,无需收费n”,cars[choice].time_in,address[cars[choice].station_in]);

}

else

{

i=abs(km[cars[choice].station_in]-km[cars[choice].station_out]);

money=cars[choice].money=i*price[cars[choice].car_type];

printf(“该车于%s在%s进入高速,需缴费%.1lf款:”,cars[choice].time_in,address[cars[choice].station_in],cars[choice].money);

fflush(stdin);

while(1)

{

while(scanf(“%lf%c”,&pay,&enter)==0 || enter!='n')

{

printf(“terror!!input again:”);

fflush(stdin);

}

if(pay>money)

{

printf(“缴付%.1lf元,找零%.1lf元...n”,pay,pay-money);

money=0;

break;

}

else if(pay

{

money=money-pay;

printf(“缴付%.1lf元,需再缴付%.1lf元:”,pay,money);

continue;

}

else

{

printf(“已缴费完毕,共收取人民币%.1lf元...n”,cars[choice].money);

break;

}

}

}

timer=time(NULL);

tblock=localtime(&timer);

printf(“现在时间是:%sn”,mytime(tblock));

strcpy(cars[choice].time_out,mytime(tblock));

元,请付

fp=fopen(“档案.txt”,“a+”);

fprintf(fp,“%5d%12s%15s%30s%10.1lf元n”,choice,kind[cars[choice].car_type],address[cars[choice].station_in],cars[choice].time_in,cars[choice].money);

fprintf(fp,“%32s%30snn”,address[cars[choice].station_out],cars[choice].time_out);

fclose(fp);

cars[choice].money=0;

cars[choice].is_in='n';

cars[choice].station_in=0;

cars[choice].station_out=startkey;

strcpy(cars[choice].time_in,“无”);

strcpy(cars[choice].time_out,“无”);

fp=fopen(filename(startkey),“a+”);

if(cars[choice].car_type==0)fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),choice,kind[cars[choice].car_type],“收卡,放行”);

else fprintf(fp,“%30s%8d%12s%20snn”,mytime(tblock),choice,kind[cars[choice].car_type],“缴费,收卡,放行”);

fclose(fp);

cars[choice].car_type=0;

fp=fopen(“记录.txt”,“w+”);

for(i=1;i<=9*NUM;i++)

{

fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);

}

fclose(fp);

printf(“请收卡放行,并按任意键回到主菜单a”);

getche();

}

else if(key==3)

{

system(“cls”);

refer(cars,startkey);

}

else if(key==4)

{

while(1)

{

system(“cls”);

printf(“input password: ”);

for(i=0;;)

{

fflush(stdin);

ch=getch();if(ch=='r' || ch=='n')

{

break;} else if(ch=='b'){

if(i-->0)

{

pwd[i]='';

printf(“b b”);

//删除前个字符,光标退一个

}

continue;}

else if(i==max_len)

{

continue;}

else

{

pwd[i++]=ch;

//接收字符到密码中

printf(“*”);} } pwd[i]='';fp=fopen(“password.txt”,“a+”);rewind(fp);fscanf(fp,“%8s”,password);fclose(fp);if(strcmp(pwd,password)==0){ break;} else { printf(“n密码错误或空密码!!(空密码时系统规定为不能注销)n”);printf(“想再输一遍密码吗?(y or n):”);while(1){

fflush(stdin);

ch=getche();

if(ch=='y' || ch=='Y')

{

system(“cls”);

break;

}

else if(ch=='n' || ch=='N')

{

break;

}

else

{

printf(“b b”);

continue;

}

}

if(ch=='y' || ch=='Y')continue;

else if(ch=='n' || ch=='N')break;

}

}

if(ch=='n' || ch=='N')continue;

i=0;

for(j=1;j<=9;j++)

{

fp=fopen(filename(j),“w+”);

fclose(fp);

}

fp=fopen(“记录.txt”,“w+”);

fclose(fp);

fp=fopen(“标记.txt”,“w+”);

fprintf(fp,“%dn”,i);

fclose(fp);

fp=fopen(“档案.txt”,“w+”);

fclose(fp);

printf(“n注销成功!!n”);

break;

}

else

{

fp=fopen(“记录.txt”,“w+”);

for(i=1;i

{

fprintf(fp,“%d %d %c %lf %d %d %st%stn”,cars[i].card_num,cars[i].car_type,cars[i].is_in,cars[i].money,cars[i].station_in,cars[i].station_out,cars[i].time_in,cars[i].time_out);

}

fclose(fp);

fp=fopen(“标记.txt”,“w+”);

fprintf(fp,“%dn”,num);

fclose(fp);

break;

} } return 0;} char *mytime(struct tm *timeptr)

//获取系统时间的函数 { char wday_name[7][4]={“Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”};static char result[29];sprintf(result,“%d年%d月%d日(%3s)%d:%d:%d”,1900+timeptr->tm_year,1+timeptr->tm_mon,timeptr->tm_mday,wday_name[timeptr->tm_wday],timeptr->tm_hour,timeptr->tm_min, timeptr->tm_sec);return result;} char *filename(int startkey){ static char name[22];sprintf(name,“车辆处理与记录%d.txt”,startkey);return name;}

void Delay(int n)//延时函数 { int i,j,k;for(i=1;i<=n;i++){

for(j=1;j<500;j++)

{

for(k=1;k<500;k++)

{

}

} } }

void initialize(struct car *cars,int num,FILE *fp)///初始化函数 { int i,j;if(num==0){

for(j=1;j<=9;j++)

{

for(i=NUM*(j-1)+1;i

{

cars[i].money=0;

cars[i].card_num=i;

cars[i].is_in='n';

cars[i].car_type=0;

cars[i].station_in=0;

cars[i].station_out=j;

strcpy(cars[i].time_in,“无”);

strcpy(cars[i].time_out,“无”);

}

} } else {

for(i=1;i<=9*NUM;i++)

{

fscanf(fp,“%d %d %c %lf %d %d %st%stn”,&cars[i].card_num,&cars[i].car_type,&cars[i].is_in,&cars[i].money,&cars[i].station_in,&cars[i].station_out,cars[i].time_in,cars[i].time_out);

} } } int refer(struct car *cars,int startkey)//查询 { FILE *fp;int i,j,key,num,k;char ch,enter;time_t timer;struct tm *tblock;

while(1){

system(“cls”);

printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”);

printf(“┃

****资料查询****

┃n”);

printf(“┃

1.里程价

┃n”);

printf(“┃

2.汽车类型

┃n”);

printf(“┃

3.沿线站点间里程

┃n”);

printf(“┃

4.高速通车情况

┃n”);

printf(“┃

5.道路交通安全法实施条例

┃n”);printf(“┃

6.车辆处理与记录

┃n”);printf(“┃

0.回到主菜单

┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择,并输入序号:”);while(1){ fflush(stdin);while(scanf(“%d%c”,&key,&enter)==0 || enter!='n'){

printf(“terror!!input again:”);

fflush(stdin);}

if(key==1 || key==2 || key==3 || key==4 || key==5 || key==6 || key==0){

system(“cls”);

switch(key)

{

case 1:

{

printf(“t里程价n”);

for(i=1;i<6;i++)

{

printf(“%s:%.1lf元/公里n”,kind[i],price[i]);

}

printf(“nt按任意键回到查询菜单”);

fflush(stdin);

getche();

break;

}

case 2:

{

printf(“t汽车类型n”);

printf(“一类车:小轿车、吉普车、的士头人货车、摩托车n”);

printf(“二类车:面包车、小型人货车、轻型货车、小型客车n”);

printf(“三类车:中型客车、大型普通客车、中型货车、大型豪华客车n”);

printf(“四类车: 大型货车、大型拖(挂)车、20英尺集装箱车n”);

printf(“五类车: 重型货车、重型拖(挂)车、40英尺集装箱车n”);

printf(“nt按任意键回到查询菜单”);

fflush(stdin);

getche();

break;

}

case 3:

{

printf(“t沿线站点间里程n”);printf(“┏━━━━━━━━━━━━━━━━━━━━┓n”);printf(“┃

1.湛江

2.茂名

3.阳江

┃n”);printf(“┃

4.开平

5.佛山

6.广州

┃n”);printf(“┃

7.深圳

8.汕头

9.汾水关

┃n”);printf(“┗━━━━━━━━━━━━━━━━━━━━┛n”);printf(“请选择起始站,并输入序号:”);fflush(stdin);while(1){ while(scanf(“%d%c”,&i,&enter)==0 || enter!='n'){

printf(“terror!!input again:”);

fflush(stdin);} if(i==1 || i==2 || i==3 || i==4 || i==5 || i==6 || i==7 || i==8 || i==9)break;else

{

printf(“terror!!input again:”);

continue;} } printf(“请选择终点站,并输入序号:”);fflush(stdin);while(1){ while(scanf(“%d%c”,&j,&enter)==0 || enter!='n'){

printf(“terror!!input again:”);

fflush(stdin);} if(j==1 || j==2 || j==3 || j==4 || j==5 || j==6 || j==7 || j==8 || j==9)break;else

{

printf(“terror!!input again:”);

continue;} } printf(“tt里程为:%d公里.n”,abs(km[i]-km[j]));printf(“nt按任意键回到查询菜单”);fflush(stdin);getche();break;

“);

} case 4: {

fp=fopen(”标记.txt“,”r+“);

fscanf(fp,”%d“,&num);

fclose(fp);

fp=fopen(”记录.txt“,”r+“);

rewind(fp);

initialize(cars,num,fp);

fclose(fp);

j=0;

k=0;

for(i=1;i<=9*NUM;i++)

{

if(cars[i].station_in!=0 && cars[i].station_out==0)j++;

if(cars[i].station_in!=0 && cars[i].station_out!=0)k++;

}

timer=time(NULL);

tblock=localtime(&timer);

printf(”现在时间是:%sn“,mytime(tblock));

printf(”在行车辆:共%d辆.n“,j);

if(k>0)printf(”t且有%d辆车正在缴费处缴费,尚未离开.nn“,k);

printf(”t以下为此高速公路通车情况.nnnn“);

printf(”%5s%12s%15s%30s%10sn“,”卡号“,”车型“,”进/出站点“,”进/出时间“,”金额

fp=fopen(“档案.txt”,“a+”);

rewind(fp);

fflush(stdin);

while(feof(fp)==0)

{

fflush(stdin);

ch=fgetc(fp);

putch(ch);

}

fclose(fp);

printf(“t按任意键回到查询菜单”);

fflush(stdin);

getche();

break;} case 5: {

fp=fopen(“广东省道路交通安全法实施条例.txt”,“a+”);printf(“t广东省道路交通安全法实施条例n”);

} case 6: {

} case 0: rewind(fp);fflush(stdin);while(1){ for(i=0;(i<4000 && feof(fp)==0)||(i>=4000 && ch!='n' && feof(fp)==0);i++){

fflush(stdin);

ch=fgetc(fp);

putch(ch);} if(feof(fp)==0){

printf(“nnt按任意键翻到下一页”);

getche();

system(“cls”);

continue;} else break;} fclose(fp);printf(“t按任意键回到查询菜单”);fflush(stdin);getche();break;

printf(“%30s%8s%12s%20sn”,“时间”,“卡号”,“车型”,“处理情况”);fp=fopen(filename(startkey),“a+”);rewind(fp);fflush(stdin);while(feof(fp)==0){ fflush(stdin);ch=fgetc(fp);putch(ch);} fclose(fp);printf(“t按任意键回到查询菜单”);fflush(stdin);getche();break;

} } }

{

return 0;

break;

} } } else { printf(“terror!!input again:”);continue;} if(key==1 || key==2 || key==3 || key==4 || key==5 || key==6)break;

第四篇:C++语言课程设计一迷你高尔夫

C++语言课程设计一迷你高尔夫

一、实验内容

玩家通过按下键盘上的上下左右方向键控制球的移动,使其最终到达出口则游戏通关。

要求如下:

1、游戏分成3关,第一关、第二关、第三关界面图如下:

第一关

第二关

第三关

2、启动游戏进入第一关,胜利后进入第二关,如果第三关通关,则游戏重新回到第一关。

3、游戏玩法是通关控制键盘上的上下左右方向键控制球的运动,单击方向键,则球获得一个向该方向直线运动的速度。如果球遇到方块,则球停止运动,如果遇到黑洞,则游戏结束,重新开始该游戏,遇到出口则通关。

4、球静止状态下会有箭头指示球可以运动的方向,运动状态下则箭头消失。如果球运动出世界边界,则游戏结束,重新回到该游戏。

二、实验指南

实验一

开始实验

【实验任务】

步骤一、打开FunCode,创建一个的C++语言项目;

步骤二、导入GolfGame场景。

【实验思路】

按实验指导完成。

【实验指导】

1、打开FunCode,点击“项目”菜单,选择“创建C++工程”

注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。

2、点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“GolfGame”模板,点击“导入到工程”按钮,如图二。

3、导入成功后的,界面如下图所示:

地图不仅包括界面设计,还包括该游戏可能要用到的其他精灵。添加到“场景”中的精灵,都已经取好名称,并根据程序要求设置好中心点、链接点等,学生只需要直接编程就可以。

实验二

游戏关卡初始化

【实验内容】

步骤一、关卡地图初始化

步骤二、清除上一关卡数据

步骤三、根据当前关卡,选择关卡数据

【实验思路】

游戏开始的时候首先要清除上一关的游戏数据,即将上一关创建的精灵从地图中删掉。

将游戏地图分成12*12的方格界面,游戏总共分成三关,因此我们需要用三个二维数组m_iLevelData1[GRID_COUNT][GRID_COUNT]

m_iLevelData2[GRID_COUNT][GRID_COUNT]

m_iLevelData3[GRID_COUNT][GRID_COUNT]

(其中GRID_COUNT的值为12)

来存放这三关的数据即可。二维数组中0表示该位置不创建精灵,否则根据不同的值创建不同精灵,RIGID_BLOCK(值为1)表示创建一个方块精灵,BLACK_HOLE(值为2)表示创建一个黑洞精灵,GOLF_EXIT(值为3)表示创建一个出口精灵。每次把代表该关卡的二维数组的数据拷贝到存储当前关卡m_iGridData的二维数组中。

【实验指导】

1、进入LessonX.h的CGameMain类中,添加以下成员变量的声明:

static

const

float

m_fGridStartX

;

//

第一块方块的起始坐标

=

-(GRID_COUNT

*

g_fGridSize

*

0.5

g_fGridSize

/

2)

static

const

float

m_fGridStartY

;

static

const

float

m_fGridSize;

//

每块的大小,包括球、出口等都是此大小

int

m_iRigidBlockCount;

//

本关卡创建的阻挡物方块数量

int

m_iBlackHoleCount

;

//

本关卡创建的黑洞数量

int

m_iGolfExitCount;

//

本关卡创建的出口的数量

int

m_iCurLevel;

//

当前关卡

int

m_iMoveState

;

//

控制球的移动状态:0当前静止,可以移动,1、2、3、4:代表上下左右4个方向移动中,按键无响应

int

m_iGridData[GRID_COUNT][GRID_COUNT];

//

二维数组,存储当

前关卡N*N的矩阵方块信息

static

const

int

m_iLevelData1[GRID_COUNT][GRID_COUNT]

;

static

const

int

m_iLevelData2[GRID_COUNT][GRID_COUNT]

;

static

const

int

m_iLevelData3[GRID_COUNT][GRID_COUNT]

;

vector

m_vRigidBlock;

//阻挡物精灵向量数组

vector

m_vBlackHole;

//黑洞精灵向量数组

vector

m_vGolfExit;

//出口精灵向量数组

int

m_iControlStartX;

//控制球的初始X坐标,根据关卡数据自行指定

int

m_iControlStartY;

//球的初始Y坐标

2、进入LessonX.h中在头文件声明的后面添加下面的宏定义代码:

#define

GRID_COUNT

//

N

*

N的矩阵方块,一个N的大小

#define

MAX_LEVEL

//

最大关卡数量。如果要增加关卡,请先修改此值

#define

RIGID_BLOCK

//

以下3个分别为方块阻挡物、黑洞、出口的值

#define

BLACK_HOLE

#define

GOLF_EXIT33、进入LessonX.cpp中添加上面的成员变量的初始化:

1)

在构造函数中把m_iGameState的值由0改为1:

m_iGameState

=

1;

2)

在构造函数中添加下面代码:

m_iRigidBlockCount

=

0;

//

本关卡创建的阻挡物方块数量

m_iBlackHoleCount

=

0;

//

本关卡创建的黑洞数量

m_iGolfExitCount

=

0;

m_iCurLevel

=

1;

m_iControlStartX

=

0;

//球的初始X坐标

m_iControlStartY

=

0;

//球的初始Y坐标

3)

对于const类型的成员变量,我们需要在函数外面单独进行初始化,在文件最后面添加如下代码:

const

float

CGameMain::m_fGridStartX

=-27.5f;

const

float

CGameMain::m_fGridStartY

=-27.5f;

const

float

CGameMain::m_fGridSize

=5.f;

const

int

CGameMain::m_iLevelData1[GRID_COUNT][GRID_COUNT]

=

{

{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0,0,0},{0,0,0,RIGID_BLOCK,0,0,0,0,RIGID_BLOCK,0,0,0},{0,0,0,RIGID_BLOCK,0,0,0,0,RIGID_BLOCK,0,0,0},{0,0,0,RIGID_BLOCK,0,0,0,0,BLACK_HOLE,0,0,0},{0,0,0,0,0,0,0,GOLF_EXIT,RIGID_BLOCK,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0}

};

const

int

CGameMain::m_iLevelData2[GRID_COUNT][GRID_COUNT]={

{0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,RIGID_BLOCK,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,GOLF_EXIT,RIGID_BLOCK,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,0,0},{0,RIGID_BLOCK,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,RIGID_BLOCK,0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0,RIGID_BLOCK,0}

};

const

int

CGameMain::m_iLevelData3[GRID_COUNT][GRID_COUNT]={

{0,0,0,0,0,0,0,0,RIGID_BLOCK,RIGID_BLOCK,0,0},{0,0,RIGID_BLOCK,RIGID_BLOCK,RIGID_BLOCK,0,0,0,0,0,0,RIGID_BLOCK},{RIGID_BLOCK,0,0,0,0,0,0,0,0,0,0,RIGID_BLOCK},{0,0,0,0,0,0,0,0,0,0,0,RIGID_BLOCK},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,GOLF_EXIT,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,RIGID_BLOCK,RIGID_BLOCK,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,RIGID_BLOCK,0},{0,0,0,RIGID_BLOCK,0,0,0,0,0,0,RIGID_BLOCK,0},{0,0,0,0,BLACK_HOLE,RIGID_BLOCK,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0}

};

二维数组中0表示该位置不创建精灵,否则根据不同的值创建不同精灵,RIGID_BLOCK(值为1)表示创建一个方块精灵,BLACK_HOLE(值为2)表示创建一个黑洞精灵,GOLF_EXIT(值为3)表示创建一个出口精灵。

4)

进入GameInit函数里面,将球的运动状态初始化为静止,添加下面代码:

m_iMoveState=0;

4、游戏初始化的时候,首先我们需要将前边添加的精灵全部删除掉,因此需要自定义的创建清除所有精灵函数ClearAllSprite()来实现这个功能。

1)

进入LessonX.h文件的CGameMain类中添加该函数的声明:

void

ClearAllSprite();

2)

在LessonX.cpp最后面添加该函数的定义:

void

CGameMain::

ClearAllSprite()

{

}

3)

再使用3个循环,分别将上一关卡创建的3种精灵删除掉。在上边定义的函数中添加如下代码:

int

iLoop

=

0;

for(iLoop

=

0;

iLoop

m_vRigidBlock.size();

iLoop++)

{

m_vRigidBlock[iLoop]->DeleteSprite();

}

for(iLoop

=

0;

iLoop

m_vBlackHole.size();

iLoop++)

{

m_vBlackHole[iLoop]->DeleteSprite();

}

for(iLoop

=

0;

iLoop

m_vGolfExit.size();

iLoop++)

{

m_vGolfExit[iLoop]->DeleteSprite();

}

其中m_vRigidBlock、m_vBlackHole、m_vGolfExit是存储三种精灵的向量数组,每一个循环都遍历一遍向量数组并调用数组中每个精灵的DeleteSprite函数即可。

m_vRigidBlock.size()、m_vBlackHole.size()、m_vGolfExit.size()表示每种精灵的总数。

4)

最后在GameInit()中添加调用此函数的代码:

ClearAllSprite();

5、在GameInit()中,我们也需要对关卡进行选择初始化。因此我们需要自定义一个初始化关卡函数InitLevel

()来实现这个功能。

1)

进入LessonX.h文件的CGameMain类中添加该函数的声明:

void

InitLevel();

2)

在LessonX.cpp最后面添加该函数的定义:

void

CGameMain::

InitLevel()

{

}

3)

初始化关卡,要根据当前关卡,选择关卡的数据,即将代表关卡的二维数组中的数据拷贝到m_iGridData中,同时设置控制球在每个数组中的起始位置。首先把需要的数据初始化为0,代码如下:

//

总数置0,重新创建

m_iRigidBlockCount

=

0;

m_iBlackHoleCount

=

0;

m_iGolfExitCount

=

0;

4)

选择关卡我们使用了switch-case结构,程序通过判断switch中的参数进入到不同的case中去,每个case就是一种情况的实现。代码如下:

//

根据当前关卡,选择关卡数据

switch(m_iCurLevel)

{

case

2:

{

m_iControlStartX

=

5;

m_iControlStartY

=

9;

memcpy(m_iGridData,m_iLevelData2,sizeof(int)

*

GRID_COUNT

*

GRID_COUNT);

}

break;

case

3:

{

m_iControlStartX

=

3;

m_iControlStartY

=

6;

memcpy(m_iGridData,m_iLevelData3,sizeof(int)

*

GRID_COUNT

*

GRID_COUNT);

}

break;

//

Level1

或者g_iCurLevel错误

case

1:

default:

{

m_iControlStartX

=

5;

m_iControlStartY

=

6;

memcpy(m_iGridData,m_iLevelData1,sizeof(int)

*

GRID_COUNT

*

GRID_COUNT);

}

break;

};

memcpy函数作用是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。因为二维数组在内存中的存放方式是连续的,因此我们将源地址拷贝给m_iGridData的起始地址之后,系统后自动根据m_iGridData的下标来找到正确的值。

5)

最后在GameInit()中添加调用此函数的代码:

InitLevel();

至此,本实验结束。

实验三

初始化游戏精灵

【实验内容】

步骤一、创建精灵

步骤二、初始化精灵位置

【实验思路】

遍历二维数组m_iGridData,根据数组值生成对应的精灵实例:值为0的时候不用创建,需要创建的精灵名字前缀为(按照宏定义的1,2,3顺序):RigidBlock,BlackHole,GolfExit。每创建一种精灵,将其总数加1

:m_iRigidBlockCount,m_iBlackHoleCount,m_iGolfExitCount。

【实验指导】

1、进入LessonX.h,CGameMain类中添加下面成员变量的声明:

CSprite*

m_pControlBall;

//控制球精灵

CSprite*

m_pGolfArrow;

//指示箭头精灵

在LessonX.cpp中CGameMain类在构造函数里面添加上面成员变量的初始化:

m_pControlBall

=

new

CSprite(“ControlBall“);

m_pGolfArrow

=

new

CSprite(“GolfArrow“);

2、创建精灵之后需要将精灵移到特定位置,因此我们需要定义一个自定义的函数MoveSpriteToBlock来实现这个功能。

6)

进入LessonX.h中添加该函数的声明:

void

MoveSpriteToBlock(CSprite*

tmpSprite,const

int

iIndexX,const

int

iIndexY);

7)

在LessonX.cpp最后面添加该函数的定义:

void

CGameMain::MoveSpriteToBlock(CSprite*

tmpSprite,const

int

iIndexX,const

int

iIndexY)

{

}

8)

传入该函数的是精灵实体以及x,y坐标参数。再通过SetSpritePosition函数设置精灵位置,在该函数里面添加如下代码:

float

fPosX

=

m_fGridStartX

+

iIndexX

*

m_fGridSize;

float

fPosY

=

m_fGridStartY

+

iIndexY

*

m_fGridSize;

tmpSprite->SetSpritePosition(fPosX,fPosY);

3、这里定义一个函数CreateAllSprite()来创建控制球、方块精灵、出口精灵和黑洞精灵。然后在函数内部添加代码创建精灵。

原理是通过两个for循环来,判断m_iGridData的值,如果为0,则不创建,如果为RIGID_BLOCK则创建一个方块精灵,为

BLACK_HOLE则创建一个黑洞精灵,为GOLF_EXIT则创建一个出口精灵。由于我们预先在地图中摆放了三个模板精灵,因此只需要使用CloneSprite函数即可创建新的精灵。然后再调用MoveSpriteToBlock函数将精灵移动到指定位置。最后每创建一个实现精灵,将它添加到相应的精灵向量数组中。

1)

进入LessonX.h文件的CGameMain类中添加该函数的声明:

void

CreateAllSprite();

2)

在LessonX.cpp最后面添加该函数的定义:

void

CGameMain::

CreateAllSprite()

{

}

3)

在定义汗的函数中添加变量声明:

int

iLoopX

=

0,iLoopY

=

0;

CSprite*

tmpSprite;

char

*szName

=

NULL;

4)

实现两个for循环:

for(iLoopY

=

0;

iLoopY

GRID_COUNT;

iLoopY++)

{

for(int

iLoopX

=

0;

iLoopX

GRID_COUNT;

iLoopX++)

{

}

}

5)

在里面的循环添加判断代码:

如果是0,则不创建精灵,continue表示跳出本次循环,继续下一个循环。

if(0

==

m_iGridData[iLoopY][iLoopX])

continue;

如果是方块,则创建方块精灵:

if(RIGID_BLOCK

==

m_iGridData[iLoopY][iLoopX])

{

szName

=

CSystem::MakeSpriteName(“RigidBlock“,m_iRigidBlockCount);

tmpSprite=new

CSprite(szName);

tmpSprite->CloneSprite(“RigidBlockTemplate“);

MoveSpriteToBlock(tmpSprite,iLoopX,iLoopY);

m_vRigidBlock.push_back(tmpSprite);

m_iRigidBlockCount++;

}

如果是黑洞,则创建黑洞精灵:

else

if(BLACK_HOLE

==

m_iGridData[iLoopY][iLoopX])

{

szName

=

CSystem::MakeSpriteName(“BlackHole“,m_iBlackHoleCount);

tmpSprite=new

CSprite(szName);

tmpSprite->CloneSprite(“BlackHoleTemplate“);

MoveSpriteToBlock(tmpSprite,iLoopX,iLoopY);

m_vBlackHole.push_back(tmpSprite);

m_iBlackHoleCount++;

}

如果是出口,则创建出口精灵:

else

if(GOLF_EXIT

==

m_iGridData[iLoopY][iLoopX])

{

szName

=

CSystem::MakeSpriteName(“GolfExit“,m_iGolfExitCount);

tmpSprite=new

CSprite(szName);

tmpSprite->CloneSprite(“GolfExitTemplate“);

MoveSpriteToBlock(tmpSprite,iLoopX,iLoopY);

m_vGolfExit.push_back(tmpSprite);

m_iGolfExitCount++;

}

6)

将控制球和指示箭头摆放到初始位置,此时球静止,因此指示箭头可见。在上面的两个循环后面添加下面的代码:

m_pControlBall->SetSpriteLinearVelocity(0.f,0.f);

MoveSpriteToBlock(m_pControlBall,m_iControlStartX,m_iControlStartY);

MoveSpriteToBlock(m_pGolfArrow,m_iControlStartX,m_iControlStartY);

m_pGolfArrow->SetSpriteVisible(1);

7)

最后在GameInit()中调用此函数:

CreateAllSprite();

至此,本实验结束。

实验四

移动球

【实验内容】

步骤一、响应键盘按键按下消息

步骤二、球精灵坐标转换为二维格子数组索引

步骤三、判断移动方向,使球获取速度

【实验思路】

首先响应系统的按键消息函数,然后获取精灵坐标,并将其转换为二维格子中的坐标,判断其旁边的格子是否是方块,如果不是则给球一个移动的速度。

【实验指导】

1、进入LessonX.h中,添加我们自定义的键盘消息处理函数OnKeyDown的声明:

void

OnKeyDown(const

int

iKey,const

int

iAltPress,const

int

iShiftPress,const

int

iCtrlPress);

2、在LessonX.cpp中添加该函数的定义:

void

CGameMain::OnKeyDown(const

int

iKey,const

int

iAltPress,const

int

iShiftPress,const

int

iCtrlPress)

{

}

3、首先判断游戏状态,只有在游戏中已经可以移动状态才响应按键,在上面函数中添加下面的代码:

if(2

!=

m_iGameState

||

0

!=

m_iMoveState)

return;

4、获取控制球精灵坐标转换到二维格子数组索引,这里我们需要定义两个函数SpritePosXToIndexX和SpritePosXToIndexY分别处理精灵坐标转换为二维格子的X索引和Y索引:

1)

进入LessonX.h中添加上面两个函数的声明:

int

SpritePosXToIndexX(const

float

fPosX);

int

SpritePosYToIndexY(const

float

fPosY);

2)

进入LessonX.cpp中添加SpritePosXToIndexX的定义:

int

CGameMain::

SpritePosXToIndexX

(const

float

fPosX)

{

}

3)

首先得到左右边界的坐标值。m_fGridStartX是在方块的中心,所以需要减去半个方块的宽度才是左边边界。在SpritePosXToIndexX函数定义中添加下面的代码:

const

float

fLeftSide

=

m_fGridStartX

m_fGridSize

/

2.f;

const

float

fRightSide

=

fLeftSide

+

m_fGridSize

*

GRID_COUNT;

4)

最后需要判断坐标是否出了左右边界,如果没有则返回X索引值。在上面的函数里面添加下面的判断代码:

if(fPosX

fLeftSide

||

fPosX

fRightSide)

return

-1;

int

iIndexX

=

(int)((fPosX

fLeftSide)

/

m_fGridSize);

return

iIndexX;

5)

在LessonX.cpp中添加SpritePosYToIndexY函数的定义:

int

CGameMain::SpritePosYToIndexY(const

float

fPosY)

{

}

6)

首先获取上下边界坐标值。m_fGridStartY是在方块的中心,所以需要减去半个方块的宽度才是上边边界。在上面的函数定义中添加下面的代码:

const

float

fTopSide

=

m_fGridStartY

m_fGridSize

/

2.f;

const

float

fBottomSide

=

fTopSide

+

m_fGridSize

*

GRID_COUNT;

7)

最后判断是否超过了上下边界,没有则返回Y索引值:

if(fPosY

fTopSide

||

fPosY

fBottomSide)

return

-1;

int

iIndexY

=

(int)((fPosY

fTopSide)

/

m_fGridSize);

return

iIndexY;

5、有了上面的两个函数,我们就可以将控制球精灵坐标转换到二维格子数组索引,并判断坐标是否超出边界,在OnKeyDown函数中添加下面的代码:

float

fPosX

=

m_pControlBall->GetSpritePositionX();

float

fPosY

=

m_pControlBall->GetSpritePositionY();

int

iIndexX

=

SpritePosXToIndexX(fPosX);

int

iIndexY

=

SpritePosYToIndexY(fPosY);

if(iIndexX

0

||

iIndexX

>=

GRID_COUNT

||

iIndexY

0

||

iIndexY

>=

GRID_COUNT)

return;

6、根据上下左右方向键,先判断控制球旁边是否是方块,如果是方块则不能移动。不是方块,则给予控制球一个速度。使用iIndexX,iIndexY的时候,注意要判断是否是边缘的索引,如果不判断就进行加1减1,访问数组会造成下标溢出。即如果要判断左边是否是方块阻挡,则索引值为

IndexX

。此时必须先判断iIndexX大于0,才能减一。如果iIndexX为0,代表直接可以移动。

1)

如果是按下向上方向键:

if(KEY_UP

==

iKey)

{

if(iIndexY

0

&&

RIGID_BLOCK

==

m_iGridData[iIndexY

1][iIndexX])

return;

//

给予控制球一个方向速度,并设置移动状态、隐藏指示箭头

m_iMoveState

=

1;

m_pControlBall->SetSpriteLinearVelocityY(-30.f);

m_pGolfArrow->SetSpriteVisible(0);

}

2)

如果是按下向下方向键:

else

if(KEY_DOWN

==

iKey)

{

if(iIndexY

GRID_COUNT

&&

RIGID_BLOCK

==

m_iGridData[iIndexY

+

1][iIndexX])

return;

//

给予控制球一个方向速度,并设置移动状态、隐藏指示箭头

m_iMoveState

=

2;

m_pControlBall->SetSpriteLinearVelocityY(30.f);

m_pGolfArrow->SetSpriteVisible(0);

}

3)

如果是按下向左方向键:

else

if(KEY_LEFT

==

iKey)

{

if(iIndexX

0

&&

RIGID_BLOCK

==

m_iGridData[iIndexY][iIndexX

1])

return;

//

给予控制球一个方向速度,并设置移动状态、隐藏指示箭头

m_iMoveState

=

3;

m_pControlBall->SetSpriteLinearVelocityX(-30.f);

m_pGolfArrow->SetSpriteVisible(0);

}

4)

如果是按下向右方向键:

else

if(KEY_RIGHT

==

iKey)

{

if(iIndexX

GRID_COUNT

&&

RIGID_BLOCK

==

m_iGridData[iIndexY][iIndexX

+

1])

return;

//

给予控制球一个方向速度,并设置移动状态、隐藏指示箭头

m_iMoveState

=

4;

m_pControlBall->SetSpriteLinearVelocityX(30.f);

m_pGolfArrow->SetSpriteVisible(0);

}

7、最后在Main.cpp中的OnKeyDown函数里面添加我们的自定义函数的调用:

g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);

至此,本实验结束。

实验五球运动情况的处理

【实验内容】

步骤一、获得球所在边缘格子信息

步骤二、不同格子分情况处理

【实验思路】

获取球精灵的当前坐标并将其转换为二维格子的坐标,判断在运动中球边缘的情况,如果已经出了边界则不需要再判断,否则如果是方块则球停靠、是黑洞则重新开始关卡、是出口则通关。

【实验指导】

1、进入LessonX.cpp中的GameRun函数中,移动状态为移动中,时刻监测控制球的移动情况,根据移动方向的下一个方块,进行对应的处理。添加下面的if判断:

if(0

!=

m_iMoveState)

{

}

2、先将控制球精灵坐标转换到二维格子数组索引,如果控制球已经出了边界,所以不需要再判断。在上面的判断里面添加下面的代码:

float

fPosX

=

m_pControlBall->GetSpritePositionX();

float

fPosY

=

m_pControlBall->GetSpritePositionY();

int

iIndexX

=

SpritePosXToIndexX(fPosX);

int

iIndexY

=

SpritePosYToIndexY(fPosY);

//

控制球已经出了边界,所以不需要再判断

if(iIndexX

0

||

iIndexX

>=

GRID_COUNT

||

iIndexY

0

||

iIndexY

>=

GRID_COUNT)

return;

3、根据当前方向,获得控制球边缘所在的格子信息(球在坐标是在中心点,所以加上球的大小的一半)。总共有4中方向,即上下左右,分别用1、2、3、4来表示,添加下面的代码:

float

fNextPosX

=

fPosX;

float

fNextPosY

=

fPosY;

//

if(1

==

m_iMoveState)

{

fNextPosY

-=

m_fGridSize

*

0.5f;

}

else

if(2

==

m_iMoveState)

{

fNextPosY

+=

m_fGridSize

*

0.5f;

}

else

if(3

==

m_iMoveState)

{

fNextPosX

-=

m_fGridSize

*

0.5f;

}

else

if(4

==

m_iMoveState)

{

fNextPosX

+=

m_fGridSize

*

0.5f;

}

4、将上面得到的坐标再转换为二维格子的坐标,并判断是否越出边界,添加下面的代码:

int

iNextIndexX

=

SpritePosXToIndexX(fNextPosX);

int

iNextIndexY

=

SpritePosYToIndexY(fNextPosY);

//

该边缘已经出了边界,不需要往下判断

if(iNextIndexX

0

||

iNextIndexX

>=

GRID_COUNT

||

iNextIndexY

0

||

iNextIndexY

>=

GRID_COUNT)

return;

5、根据球边缘当前所在的格子的信息,进行不同的处理:是方块则球停靠、是黑洞则重新开始关卡、是出口则通关:

1)

是方块:

if(RIGID_BLOCK

==

m_iGridData[iNextIndexY][iNextIndexX])

{

//

清零移动状态

m_iMoveState

=

0;

//

速度清零,显示指示箭头

m_pControlBall->SetSpriteLinearVelocity(0.f,0.f);

m_pGolfArrow->SetSpriteVisible(1);

//

把球和指示箭头设置在本方块的中心

MoveSpriteToBlock(m_pControlBall,iIndexX,iIndexY);

MoveSpriteToBlock(m_pGolfArrow,iIndexX,iIndexY);

}

2)

是黑洞:

else

if(BLACK_HOLE

==

m_iGridData[iNextIndexY][iNextIndexX])

{

//

将游戏状态设置为1,重新开始关卡

m_iGameState

=

1;

}

3)

是出口:

else

if(GOLF_EXIT

==

m_iGridData[iNextIndexY][iNextIndexX])

{

//

将游戏状态设置为1,开始新关卡

m_iGameState

=

1;

//

往下一关卡,如果已经是最大值,则返回第一关

m_iCurLevel++;

if(m_iCurLevel

MAX_LEVEL)

m_iCurLevel

=

1;

}

至此,本实验结束。

实验六球出边界处理

【实验内容】

步骤、控制球出边界,则游戏重新开始

【实验思路】

此部分比较简单,只要通过系统判断球精灵是否越过世界边界,得到数据之后在我们的自定义函数里面处理即可。

【实验指导】

1、进入LessonX.h中添加我们的自定义处理函数OnSpriteColWorldLimit的声明:

void

OnSpriteColWorldLimit(const

char

*szName,const

int

iColSide);

2、进入LessonX.cpp中添加该函数的定义:

void

CGameMain::OnSpriteColWorldLimit(const

char

*szName,const

int

iColSide)

{

}

3、在上面的函数定义中,我们只要知道系统的OnSpriteColWorldLimit函数中返回的szName是否是球精灵的名称,如果是的话则本局游戏结束,重新开始游戏。在上面的定义里面添加下面的代码:

//

只处理控制的球

if(stricmp(szName,m_pControlBall->GetName())

!=

0)

return;

//

将游戏状态设置为1,重新开始关卡

m_iGameState

=

1;

4、进入Main.cpp文件,在OnSpriteColWorldLimit函数里面添加我们自定义的函数的调用,填入下面一行代码:

g_GameMain.OnSpriteColWorldLimit(szName,iColSide);

5、打开Funcode,点击地图中的球精灵,在右侧的“编辑”->“世界边界限制”中,选择限制模式为NULL,这样系统就会以我们自定义的函数处理球越过边界的事件了。

至此,本实验结束。

第五篇:王爽穷人续写

《穷人》续写

谷硐小学六(1)班王爽

自从桑娜把邻居西蒙的两个孩子抱回家后,日子就更难熬了。为了让家里的每个人都吃得饱,渔夫每天起早贪黑,没日没夜的打鱼,桑娜又要照顾孩子,又要打扫屋子,很是辛苦。这天,很晚了,渔夫还没有回家,桑娜担心极了,“轰”门开了,渔夫满头大汗,气喘吁吁。“怎么了”桑娜问,“我被鲨鱼袭击了,那些可怕的恶魔袭击了我,船破了,网了丢了,不过上帝保佑我,我没死。”渔夫激动地说道。“那怎么办?你不能去打鱼了,孩子们怎么办?”“还好,我还有两桶鱼、凑合吃吧。”桑娜和渔夫的对话吵醒了,他们最大最懂事的孩子问:“怎么了,爸爸妈妈,是不是吃的不够?没关系,我少吃一点就行了,不能饿坏了两个小弟弟,我们总能熬过去的,对吧。””“对!”桑娜和渔夫抱住了孩子……

第二天渔夫就修好了船,向其它渔夫家借了网,又继续出海了,他脑子里只有一句话:我们总能熬过去的。多么强大的一句话呀,它支撑着渔夫一家,让他们一直不放弃。

许多年后,桑娜和渔夫的七个孩子都过得很好,桑娜和渔夫早已白发苍苍,他们对视着说:我们总算熬过来了。

下载王爽语言课程设计一代码word格式文档
下载王爽语言课程设计一代码.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    王爽的前期报告

    河北工业大学专科2012届毕业论文前期报告 河北工业大学专科2012届毕业论文前期报告毕业论文题目:文安县农村贫困救助问题研究 专业:社区管理与服务 学生信息:学号:094785姓名:王......

    vb课程设计档案管理系统代码

    一、 登陆界面 运行本系统需要进行用户名和密码验证,没有用户名的可以在登陆界面注册,详细注册方法在下文有介绍。登陆界面效果图如图1-1: 图1-1 登陆界面设计的代码如下: Priva......

    操作系统课程设计题目及代码5篇

    题目一 模拟操作系统设计 设计一个模拟操作系统管理程序,实现下列管理功能: 1.内存管理功能 2.文件管理功能 3.磁盘管理功能题目二虚拟存储器各页面置换算法的实现与比较 内 容:设......

    C语言课程设计

    C语言课程设计 飞机空战小游戏 一、实验环境 运行系统 WINDOWSXP 编程工具C++6.0 地点 程序设计与仿真实验室 桌号19电脑IP地址221.12.10.218 二、实验目的和要求 实验目的......

    C语言课程设计范文

    C语言程序设计课程设计设计题目:专业:计算机科学与技术班级:2010级计算机二班组长姓名:马得才【P101712944】成员姓名:孙丽欣【P101712927】 赵广峰【P101712926】 迟成凯【P1017......

    C语言课程设计

    #include #include int N1,N2,kk1,kk2,kk3; struct couse * head1,*head2,*emp1; struct student * head3,*head4,*emp2; struct couse//课程信息结构体 { int num1; char n......

    CC语言课程设计

    1,/*100-999内的水仙花数的个数*/ #include main() { int a,b,c,d,s,i=0; for(a=100;a......

    2012语言课程设计任务书

    河南工程学院 《汇编语言》 课程设计任务书 适用专业:计算机科学与技术适用班级: 本科2014年12月20日 《汇编语言》课程设计任务书 一、课程设计目的与任务 汇编语言课程设计......