本文目錄一覽:
用“vc”或“c++”編寫的一個小游戲代碼,源代碼是什么?
#include\x0d\x0a#include\x0d\x0a#include\x0d\x0a#define LEFT 0x4b00\x0d\x0a#define RIGHT 0x4d00\x0d\x0a#define DOWN 0x5000\x0d\x0a#define UP 0x4800\x0d\x0a#define ESC 0x011b\x0d\x0aint i,key;\x0d\x0aint score=0;\x0d\x0aint gamespeed=32000;\x0d\x0astruct Food /*食物的結構體*/\x0d\x0a{\x0d\x0aint x; /*食物的橫坐標*/\x0d\x0aint y; /*食物的縱坐標*/\x0d\x0aint yes; /*食物是否出現的變量*/\x0d\x0a}food;\x0d\x0astruct Snack /*蛇的結構體*/\x0d\x0a{\x0d\x0aint x[N];\x0d\x0aint y[N];\x0d\x0aint node; /*蛇的節數*/\x0d\x0aint direction; /*蛇的方向*/\x0d\x0aint life; /*蛇的生命,0活著,1死亡*/\x0d\x0a}snake;\x0d\x0avoid Init(void); /*圖形驅動*/\x0d\x0avoid Close(void); /*關閉游戲函數*/\x0d\x0avoid DrawK(void); /*畫圖函數*/\x0d\x0avoid GameOver(void);/*輸出失敗函數*/\x0d\x0avoid GamePlay(); /*游戲控制函數 主要程序*/\x0d\x0avoid PrScore(void); /*分數輸出函數*/\x0d\x0a\x0d\x0aDELAY(char ch)/*調節游戲速度*/\x0d\x0a{\x0d\x0aif(ch=='3')\x0d\x0a{\x0d\x0adelay(gamespeed); /*delay是延遲函數*/\x0d\x0adelay(gamespeed);\x0d\x0a}\x0d\x0aelse if(ch=='2')\x0d\x0a{\x0d\x0adelay(gamespeed);\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aMenu()/*游戲開始菜單*/\x0d\x0a{\x0d\x0achar ch;\x0d\x0aprintf("Please choose the gamespeed:\n");\x0d\x0aprintf("1-Fast 2-Normal 3-Slow\n");\x0d\x0aprintf("\nPlease Press The numbers..\n");\x0d\x0ado\x0d\x0a{ch=getch();}\x0d\x0awhile(ch!='1'ch!='2'ch!='3');\x0d\x0aclrscr();\x0d\x0areturn(ch);\x0d\x0a}\x0d\x0a\x0d\x0a/*主函數*/\x0d\x0avoid main(void)\x0d\x0a{\x0d\x0aint ch;\x0d\x0ach=Menu();\x0d\x0aInit();\x0d\x0aDrawK();\x0d\x0aGamePlay(ch);\x0d\x0aClose();\x0d\x0a}\x0d\x0a\x0d\x0avoid Init(void)\x0d\x0a{\x0d\x0aint gd=DETECT,gm;\x0d\x0ainitgraph(gd,gm,"c:\\tc");\x0d\x0acleardevice();\x0d\x0a}\x0d\x0a\x0d\x0avoid DrawK(void)\x0d\x0a{\x0d\x0asetcolor(11);\x0d\x0asetlinestyle(SOLID_LINE,0,THICK_WIDTH);\x0d\x0afor(i=50;i0;i--) /*貪吃蛇的移動算法*/\x0d\x0a{\x0d\x0asnake.x[i]=snake.x[i-1];\x0d\x0asnake.y[i]=snake.y[i-1]; /*貪吃蛇的身體移動算法*/\x0d\x0a}\x0d\x0a\x0d\x0aswitch(snake.direction) /*貪吃蛇的頭部移動算法,以此來控制移動*/\x0d\x0a{\x0d\x0acase 1:snake.x[0]+=10;break;\x0d\x0acase 2:snake.x[0]-=10;break;\x0d\x0acase 3:snake.y[0]-=10;break;\x0d\x0acase 4:snake.y[0]+=10;break;\x0d\x0a}\x0d\x0afor(i=3;i595||snake.y[0]455)\x0d\x0a{\x0d\x0aGameOver();\x0d\x0asnake.life=1;\x0d\x0a}\x0d\x0aif(snake.life==1) /*如果死亡就退出循環*/\x0d\x0abreak;\x0d\x0aif(snake.x[0]==food.xsnake.y[0]==food.y) /*判斷蛇是否吃到食物*/\x0d\x0a{\x0d\x0asetcolor(0);\x0d\x0arectangle(food.x,food.y,food.x+10,food.y-10); /*吃的食物后用黑色將食物擦去*/\x0d\x0asnake.x[snake.node]=-20;snake.y[snake.node]=-20; /*現把增加的一節放到看不到的地方去*/\x0d\x0a\x0d\x0asnake.node++;\x0d\x0afood.yes=1;\x0d\x0ascore+=10;\x0d\x0aPrScore();\x0d\x0a}\x0d\x0asetcolor(4); /*每次移動后將后面的身體擦去*/\x0d\x0afor(i=0;i
回答于?2022-11-16
求助C課程設計
下面是一個比較完善的學生管理系統了,有簡單界面。
已經在實際環境上編譯并運行通過。
==============================================================
#includeiostream.h
#includeiomanip.h
#includewindows.h
#include conio.h
void back();//返回開始菜單
void out();//輸出信息
int w=1; //用于記錄學生人數,全局變量
class Data//日期類
{public:
double Year,Month,Day;
Data()
{ Year=0;Month=0;Day=0; }
};
class student //學生類
{
public:
char name[10]; //姓名
char sex[5]; //性別
char jiguan[10]; //籍貫
int num,age;//學號,年齡
char adr[30];//住址
Data year;
friend class Data;//date作為student的友元 //定義一個日期類
void operator=(student s); //=重載
int operator == (student s);//==重載
}stu[100];
void main()
{
system("cls");//清屏 DOC調用
system("color f4"); //顏色 同樣是調用doc
int i;
void comp();
void input();
void find();
void alt() ;
void del();
void exit();
void show();
coutsetw(53)"歡迎進入學生管理系統!"endl;
coutsetw(55)"1 添加學生信息 2 查詢學生信息"endlendl;
coutsetw(55)"3 刪除學生信息 4 修改學生信息"endlendl;
coutsetw(55)"5 比較學生信息 6 顯示學生信息"endlendl;
coutsetw(45)"0 推出系統"endl;
cout"請選擇:";
cini;
if(i6||i0)
{
cout"輸入有誤!"endl;
back();
}
switch(i)
{
case 1:input();break;
case 2:find();break;
case 3:del();break;
case 4:alt();break;
case 5:comp();break;
case 6:show();break;
case 0:exit();break;
default:cout"你的輸入有誤!\n";
}
}
void input() //添加學生
{
system("color 84"); //顏色 同樣是調用doc
system("cls");//清屏
int n;
cout"請輸入要添加的學生個數:\n";
cinn;
if(n=100||n=0)
{cout"輸入有誤!endl";
main(); }
else
{
for(;n0;w++,n--)
{
cout"請輸入姓名、性別、籍貫,年齡,學號,住址:"endl;
cinstu[w].namestu[w].sexstu[w].jiguanstu[w].age stu[w].numstu[w].adr ;
cout"請輸入該生生日(年 月 日)"endl;
cinstu[w].year.Year;
cinstu[w].year.Month;
cinstu[w].year.Day;
}
out();
}
cout"添加完畢2秒后返回"endl;
Sleep(2000); //延時2秒
main();
}
void find() //按學號查找學生
{
system("color f4"); //顏色 同樣是調用doc
system("cls");
int i,id,j=0;//j是用以記錄是否有信息被找到
cout"請輸入你要查找學生的學號:";
cinid;
for(i=1;iw;i++)
if(stu[i].num ==id)
{
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Daystu[i].adrendl;
j++;
}
if(j==0)
cout"沒有你要查找的信息";
back();
}
void del()//刪除指定學號學生信息
{
system("color f4"); //顏色 同樣是調用doc
int i,a,y=0;
char x;
cout"請輸入要刪除的學生學號";
cina;
for(i=1;iw;i++)
if(stu[i].num==a)
{
cout"該生情況:"endl;
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
cout"是否確認刪除?(Y/N)"endl;
cinx;
if(x=='Y'||x=='y')
{
y++;
for(;iw-1;i++)
stu[i]=stu[i+1];
w--;//每刪除一個對總是減少一個
}
}
if(y==0)
{
cout"該學生不存在!"endl;
back();
}
else
{
cout"刪除后的信息為:"endl;
out();
back();
}
}
void alt()//修改指定學號學生
{
system("color f4"); //顏色 同樣是調用doc
int id,y=0;
char x;
cout"請輸入要修改學生的學號:";
cinid;
for(int i=1;iw;i++)
if(stu[i].num ==id)
{
cout"該生情況:"endl;
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
cout"是否確認修改?(Y/N)"endl;
cinx;
if(x=='Y'||x=='y')
{
y++;
cout"請輸入姓名、性別、籍貫,年齡,學號,住址:"endl;
cinstu[i].namestu[i].sexstu[i].jiguanstu[i].age stu[i].numstu[i].adr ;
cout"請輸入該生生日(年 月 日)"endl;
cinstu[i].year.Year;
cinstu[i].year.Month;
cinstu[i].year.Day;
}
else
{
cout"2秒后返回"endl;
Sleep(2000);
main();
}
}
if(y==0)
{
cout" 該學生不存在!";
back();
}
else
{
cout"修改后的信息為:"endl;
out();
back();
}
}
void student::operator =(student stu)//對=運算符重載函數的實現
{
num=stu.num;
for(int i=0;i9;i++)
name[i]=stu.name[i];
for(i=0;i4;i++)
sex[i]=stu.sex[i];
age=stu.age;
for(i=0;i9;i++)
jiguan[i]=stu.jiguan[i] ;
for(i=0;i29;i++)
adr[i]=stu.adr[i] ;
year.Year=stu.year.Year ;
year.Month =stu.year.Month ;
year.Day =stu.year.Day ;
}
int student::operator == (student stu)//對==運算符重載函數的實現
{
if(*name==*stu.name *sex==*stu.sex age==stu.age *jiguan==*stu.jiguan *adr==*stu.adryear.Year ==stu.year.Yearyear.Month ==stu.year.Monthyear.Day ==stu.year.Day )
return 1;
else
return 0;
}
void comp()//學生信息對比
{
system("color f4"); //顏色 同樣是調用doc
system("cls");
int i;
int num1,num2;
cout"請輸入要比較的兩個同學的學號"endl;
cinnum1num2;
for(i=1;iw;i++)
if(stu[i].num ==num1)
num1=i;
for(i=1;iw;i++)
if(stu[i].num==num2)
num2=i;
if(stu[num1]==stu[num2])
cout"這兩個學生是相同的"endl;
else
cout" 這兩個學生不同"endl;
back();
}
void show()//顯示
{
out();
back();
}
void exit()//退出
{
exit(0);
}
void back()//返回
{
cout" 按任意鍵返回!"endl;
getch();
main();
}
void out()//輸出
{
int i;
cout" 姓名 性別 籍貫 年齡 學號 生日 住址"endl;
for(i=1;iw;i++)
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
}
哈希查找的解決沖突
影響哈希查找效率的一個重要因素是哈希函數本身。當兩個不同的數據元素的哈希值相同時,就會發生沖突。為減少發生沖突的可能性,哈希函數應該將數據盡可能分散地映射到哈希表的每一個表項中。解決沖突的方法有以下兩種:
(1) 開放地址法
如果兩個數據元素的哈希值相同,則在哈希表中為后插入的數據元素另外選擇一個表項。
當程序查找哈希表時,如果沒有在第一個對應的哈希表項中找到符合查找要求的數據元素,程序就會繼續往后查找,直到找到一個符合查找要求的數據元素,或者遇到一個空的表項。
(2) 鏈地址法
將哈希值相同的數據元素存放在一個鏈表中,在查找哈希表的過程中,當查找到這個鏈表時,必須采用線性查找方法。
例3. 6是一個簡單的哈希查找算法程序,你可以將它和本章結尾的有關代碼一起編譯連接成一個可執行程序。
例3.6一個簡單的哈希查找算法程序
1: #includestdlib.h
2: #includestring.h
3: #include list.h
4: #include hash.h
5:
6: #define HASH_SIZE 1024
7:
8: static listnode_t *hashTable[HASH_SIZE];
9:
10: void insert(const char * s)
11: {
12: listnode_t *ele = newNode((void * ) s)
13: unsigned int h = hash(s) % HASH_SIZE;
14:
15: ele-next = hashTable[h]
16: hashTable[h] = ele;
17: }
18:
19: void print (void)
20: {
21: int h;
22:
23: for (h = 0; h HASH_SIZE; h++)
24: {
25: listnode_t * lp = hashTalbe[h];
26:
27: if(lp == NULL)
28: continue;
29: printf([%d] , h);
30: while (lp)
31: {
32: printf(\t'%s' , lp-u.str)
33: lp = ip-next;
34: }
35: putchar ('\n');
36: }
37: }
38:
39: const char *search(const char *s)
40: {
39: unsigned int h = hash(s) % HASH_SIZE;
42: listnode_t * lp = hashTable[h];
43:
44: while (lp)
45: {
46: if (! strcmp (s, lp-u.str))
47: return lp-u.str;
48: lp = lp-next;
49: }
50: return NULL;
51: }
請參見:
3. 4 哪一種查找方法最方便?
3.5 哪一種查找方法最快?
3.8 怎樣查找鏈表中的數據?
_____________________________________________
以下是一個簡單示例:
#includeiostream
#includestring
using namespace std;
#define m 5 //人數
#define n 10 //哈希表長度
#define q 7 //隨機數
struct name{
char *py;
int k;
};
name namelist[n];
struct hash{
char *py;
int k;
int s;
};
hash hashlist[n];
void listname()
{
char *f;
int s0,r,i;
namelist[0].py=as;
namelist[1].py=sa;
namelist[2].py=d;
namelist[3].py=f;
namelist[4].py=g;
for(i=0;im;i++)
{
s0=0;
f=namelist[i].py;
for(r=0;*(f+r)!='\0';r++)
s0+=*(f+r);
namelist[i].k=s0;
}
}
void creathash()
{
int i;
for(i=0;in;i++)
{
hashlist[i].py=;
hashlist[i].k=0;
hashlist[i].s=0;
}
for(i=0;im;i++)
{
int sum=0;
int adr=(namelist[i].k)%q;
int d=adr;
if(hashlist[adr].s==0)
{
hashlist[adr].py=namelist[i].py;
hashlist[adr].k=namelist[i].k;
hashlist[adr].s=1;
}
else
{
while(hashlist[d].k!=0)
{
d=(d+namelist[i].k%5+1)%q;
sum+=1;
}
hashlist[d].py=namelist[i].py;
hashlist[d].k=namelist[i].k;
hashlist[d].s=sum+1;
}
}
}
void find()
{
string nam;
int s0=0,r,sum=1,adr,d;
cout請輸入姓名的拼音:endl;
cinnam;;
for(r=0;r20;r++)
s0+=nam[r];
adr=s0%q;
d=adr;
if(hashlist[adr].k==s0)
cout姓名:hashlist[d].py 關鍵字:s0 查找長度為: 1endl;
else if(hashlist[adr].k==0)
cout無此記錄!endl;
else
{
int g=0;
while(g==0)
{
d=(d+s0%5+1)%q;
sum+=1;
if(hashlist[d].k==0)
{
cout無此記錄!endl;
g=1;
}
if(hashlist[d].k==s0)
{
cout姓名:hashlist[d].py 關鍵字:s0 查找長度為: 1endl;
g=1;
}
}
}
}
void display()
{
int i;
float av=0;
for(i=0;in;i++)
{
cout姓名:hashlist[i].py 關鍵字:hashlist[i].k搜索長度:hashlist[i].sendl;
}
for(i=0;i7;i++)
{
av+=hashlist[i].s;
}
av/=m;
cout平均查找長度:=avendl;
}
int main()
{
char x;
listname();
creathash();
coutd. 顯示哈希表 f. 查找 任意鍵退出 請選擇:endl;
while(cinx){
if(x=='d'){display(); coutendl;}
else if(x=='f'){find();coutendl;}
else break;
}
return 0;
}
弄00puts通過了本西0
弄00puts通過了本西0
puts是輸出函數,只有一個參數要求是字符串。
1、函數輸入字符串時存在一個問題,就是如果輸入了空格會認為字符串結束,空格后的字符將作為下一個輸入項處理。puts()函數用來向標準輸出設備寫字符串并換行,其調用格式為puts,puts(s)等效于printf("%s\n",s)。
2、gets()函數將接收輸入的整個字符串直到遇到換行為止。當puts遇到O時,會輸出一個\n,也就是換行,所以puts("")時,因為字符串本身長度為0,所以第一個字符就是\0,puts會輸出一個\n,所以起到了換行的效果。
3、puts()函數用來向標準輸出設備寫字符串并換行。puts(char*p)是專門輸出字符串的函數,其參數是一個指向字符串的指針p,或者說一個串的地址。printf(char*p,s)是一個格式輸出函數,把s代表的變量或者數組字符串等按照串p所指的格式輸出。