出于字数原因,暂时无法在一个文章里写完,所以分了上下两半部分
目录
首先,是最普通的头文件,分别是:
- #include
- //万能头文件
-
- //注意:剩下的两个头文件不是在万能头文件里的!
- #include
- //检测键盘输入
- #include
- //主要为了Sleep(int dilliseconds)函数
接下来,我们需要一个叫world的二维数组,来储存地图(建议开到world[20][40],出于字符长是宽的两倍的原因,所以第二个下标最好是第一个下标的2倍)
然后为了方便需要一个叫PlayerCnt的常量,来寄存一共有多少个人(因为后续可能会做调整)
定义完PlayerCnt之后,就可以分别定义:
- int PlayerCnt=10;//推荐10个人
- bool Alive[PlayerCnt];//
- bool Imposter[Playercnt];//
- char Source[PlayerCnt];//分别记录每个玩家的形象,后面会说
- int MobX[PlayerCnt];//X坐标
- int MobY[PlayerCnt];//Y坐标
- bool Killing;//后面有用
- int CrewLeft,ImposterLeft;//分别代表剩余船员、剩余内鬼
- bool Restart=0,Reported;//在后面有用
- string str;//在后面有用
注意:没提到const的数据千万别作死在前面加个const
主函数也是很简单的,先上代码:
- int main()
- {
- //{'M','%','@','V','H','A','S','D','W','O'} 这个是废弃的样子
- Restart=0;
- Reported=0;
- Source[0]='1';Source[1]='2';Source[2]='3';Source[3]='4';Source[4]='5';Source[5]='6';Source[6]='7';Source[7]='8';Source[8]='9';Source[9]='O';
- //重置样子(不能忽略)
- //别把它“优化”成了for(int i=0;i
- //然后也千万别把char改成int
- system("cls");
- played=1;//没啥用,但是如果要做测试的话可以用
- load();//
- while(1)
- {
- ScreenUpdate();//最重要的函数
- if(Restart==1)//判断有没有重置游戏
- {
- system("cls");
- cout<<"Creating new game..."<
"Press any key to continue"< - load();
- getch();
- main();//主函数调用
- }
- }
- }
void Load()
这是一个无返回值的函数,所以别手欠在后面补上return 0;
然后这个函数的目的是初始化游戏,因为后面有个递归调用main()
代码就不写了,因为真的太太太太太太太太简单了,只是需要提醒几点:
1. X坐标及Y坐标的重置(别超出20*40)
2. Imposter数组的重置(将三个下标设为1)
3.Alive数组的重置(将所有都设为1)
4.地图要加边框
void ScreenUpdate()
终于,我们到了最重要的部分了!
函数主体
这个函数我就直接公开代码吧,因为它就是一堆别的函数的集合
- void ScreenUpdate()
- {
- MobUpdate();//另外一个套了很多函数的函数
- system("cls");//清屏
- bool x=0;
- //嵌套循环输出整个世界
- for(int i=0;i<20;i++)//world[ 20 ][40]
- {
- for(int j=0;j<40;j++)//world[20][ 40 ]
- {
- //cout<
- x=0;
- //检测这个地方有没有玩家,如果有,则输出形象,没有的话就正常输出
- for(int k=0;k
- {
- if(MobX[k]==j&&19-MobY[k]==i)
- {
- x=1;
- cout<
- break;
- }
- }
- if(x==0)cout<
- }
- cout<
- }
- CheckAlive();//检查状况
- //这里是来提示玩家现在状况的,自己看它们代表什么 注:\t 代表 tab
- cout<<"Crews left: "<
"\tImposters left: "< - if(Evil[9]==1)cout<<"You're the imposter No.10"<
- else cout<<"You're the crew No.10"<
- if(Alive[9]==0)
- {
- char key;
- cout<<"You're Dead"<
"Press space bar to restart"; - }else if(Reported==0)cout<<"You can Press R to report once"<
- Sleep(200);
- }
试运行
好了,现在就差不多可以试运行了,这里提供了一个简介的代码(也就是删掉了没定义的函数避免报错)来运行:
- #include
- using namespace std;
- char world[20][40];
- const int PlayerCnt=10;
- char Source[PlayerCnt]={'M','%','@','V','H','A','S','D','W','O'};
- int MobX[PlayerCnt];
- int MobY[PlayerCnt];
- bool Alive[PlayerCnt];
- bool Evil[PlayerCnt];
- bool played=0,Killing;
- int CrewLeft,ImposterLeft;
- bool Restart=0,Reported;
- string str;
- void load()
- {
- srand(time(0));
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- if(i==0||i==19||j==0||j==39)
- {
- world[i][j]='#';
- }else world[i][j]=' ';
- }
- }
- for(int i=0;i
- {
- Evil[i]=0;
- Alive[i]=1;
- MobX[i]=rand()%36+1;
- MobY[i]=rand()%16+1;
- }
- for(int i=0;i<3;i++)Evil[rand()%PlayerCnt]=1;
- }
- void ScreenUpdate()
- {
- system("cls");
- bool x=0;
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- //cout<
- x=0;
- for(int k=0;k
- {
- if(MobX[k]==j&&19-MobY[k]==i)
- {
- x=1;
- cout<
- break;
- }
- }
- if(x==0)cout<
- }
- cout<
- }
- cout<<"Crews left: "<
"\tImposters left: "< - //这里的两个变量都会是0因为还没定义CheckAlive();
- if(Evil[9]==1)cout<<"You're the imposter No.10"<
- else cout<<"You're the crew No.10"<
- if(Alive[9]==0)
- {
- char key;
- cout<<"You're Dead"<
"Press space bar to restart"; - }else if(Reported==0)cout<<"You can Press R to report once"<
- Sleep(200);
- }
- int main()
- {
- //{'M','%','@','V','H','A','S','D','W','O'}
- Restart=0;
- Reported=0;
- Source[0]='1';Source[1]='2';Source[2]='3';Source[3]='4';Source[4]='5';Source[5]='6';Source[6]='7';Source[7]='8';Source[8]='9';Source[9]='O';
- system("cls");
- played=1;
- load();
- while(1)
- {
- ScreenUpdate();
- if(Restart==1)
- {
- system("cls");
- cout<<"Creating new game..."<
"Press any key to continue"< - load();
- getch();
- main();
- }
- }
- }
运行结果
很好!

我们可以看见已经会有一个基础的场景了,后续会对这个场景进行优化来添加很多装饰!
void MobUpdate()
注意看!这个函数也很重要,因为它的编写决定了玩家的移动
上——代——码——
- void MobUpdate()
- {
- TryMove();//控制玩家的移动
- srand(time(0));
- //船员报告
- if(rand()%30==0)
- {
- Report(rand()%10+1);
- }
- //拿循环来控制每个人的移动(后续会优化)
- for(int i=0;i
-1;i++) - {
- if(Alive[i]==1)
- {
- //我爱随机数~
- if(rand()%3==0)MobX[i]+=rand()%3-1;
- if(rand()%3==0)MobY[i]+=rand()%3-1;
- }
- //防出界
- if(MobX[i]<1)MobX[i]=1;
- if(MobX[i]>38)MobX[i]=38;
- if(MobY[i]<1)MobY[i]=1;
- if(MobY[i]>18)MobY[i]=18;
- }
- //两个void
- Kill();
- BodyReport();
- }
打酱油?!
然后如果不介意的话顺便介绍一个基本上啥用都没void CheckAlive()
这个代码我就不说了,看就能明白
- void CheckAlive()
- {
- CrewLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Source[i]!='X')CrewLeft++;
- }
- ImposterLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Evil[i]==1&&Source[i]!='X')ImposterLeft++;
- }
- }
只是你打酱油而已,我才不打
介绍完“没用”的东西之后,是时候介绍“有用”得了
我们就来分解一下MobUpdate()这个东西
void TryMove
Wow!我们终于可以移动了!
还不赶紧上代码?
- void TryMove()
- {
- char key;//这就是为啥要
- key=0;//重置按键
- Killing=0;
- if(_kbhit()&&Alive[9]==1)//检测输入
- {
- key=getch();
- if(key=='w'&&MobY[PlayerCnt-1]<18)MobY[PlayerCnt-1]++;
- if(key=='s'&&MobY[PlayerCnt-1]>1)MobY[PlayerCnt-1]--;
- if(key=='a'&&MobX[PlayerCnt-1]>1)MobX[PlayerCnt-1]--;
- if(key=='d'&&MobX[PlayerCnt-1]<38)MobX[PlayerCnt-1]++;
- if(key=='r'&&Reported==0)Report(10);
- if(key==' '&&Alive[9]==0)Restart=1;
- }
- }
R和空格键我们后面再说
初级回顾
我们来回顾一下之前的代码来重新明确每个函数的用途:
首先,我们定义了变量
其次,我们定义了ScreenUpdate来控制屏幕输出
然后我们写了MobUpdate来使角色可以移动
然后我们整了一个打酱油的函数拿来统计生还人数和内鬼剩余数量
接下来又是快乐的试运行!
- #include
- using namespace std;
- char world[20][40];
- const int PlayerCnt=10;
- char Source[PlayerCnt]={'M','%','@','V','H','A','S','D','W','O'};
- int MobX[PlayerCnt];
- int MobY[PlayerCnt];
- bool Alive[PlayerCnt];
- bool Evil[PlayerCnt];
- bool played=0,Killing;
- int CrewLeft,ImposterLeft;
- bool Restart=0,Reported;
- string str;
- void load()
- {
- srand(time(0));
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- if(i==0||i==19||j==0||j==39)
- {
- world[i][j]='#';
- }else world[i][j]=' ';
- }
- }
- for(int i=0;i
- {
- Evil[i]=0;
- Alive[i]=1;
- MobX[i]=rand()%36+1;
- MobY[i]=rand()%16+1;
- }
- for(int i=0;i<3;i++)Evil[rand()%PlayerCnt]=1;
- }
- void TryMove()
- {
- char key;
- key=0;
- Killing=0;
- if(_kbhit()&&Alive[9]==1)
- {
- key=getch();
- if(key=='w'&&MobY[PlayerCnt-1]<18)MobY[PlayerCnt-1]++;
- if(key=='s'&&MobY[PlayerCnt-1]>1)MobY[PlayerCnt-1]--;
- if(key=='a'&&MobX[PlayerCnt-1]>1)MobX[PlayerCnt-1]--;
- if(key=='d'&&MobX[PlayerCnt-1]<38)MobX[PlayerCnt-1]++;
- if(key=='r'&&Reported==0)//Report(10);
- if(key==' '&&Alive[9]==0)Restart=1;
- }
- }
- void MobUpdate()
- {
- TryMove();
- srand(time(0));
- for(int i=0;i
-1;i++) - {
- if(Alive[i]==1)
- {
- if(rand()%3==0)MobX[i]+=rand()%3-1;
- if(rand()%3==0)MobY[i]+=rand()%3-1;
- }
- if(MobX[i]<1)MobX[i]=1;
- if(MobX[i]>38)MobX[i]=38;
- if(MobY[i]<1)MobY[i]=1;
- if(MobY[i]>18)MobY[i]=18;
- }
- }
- void CheckAlive()
- {
- CrewLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Source[i]!='X')CrewLeft++;
- }
- ImposterLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Evil[i]==1&&Source[i]!='X')ImposterLeft++;
- }
- }
- void ScreenUpdate()
- {
- MobUpdate();
- system("cls");
- bool x=0;
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- //cout<
- x=0;
- for(int k=0;k
- {
- if(MobX[k]==j&&19-MobY[k]==i)
- {
- x=1;
- cout<
- break;
- }
- }
- if(x==0)cout<
- }
- cout<
- }
- CheckAlive();
- cout<<"Crews left: "<
"\tImposters left: "< - if(Evil[9]==1)cout<<"You're the imposter No.10"<
- else cout<<"You're the crew No.10"<
- if(Alive[9]==0)
- {
- char key;
- cout<<"You're Dead"<
"Press space bar to restart"; - }else if(Reported==0)cout<<"You can Press R to report once"<
- Sleep(200);
- }
- int main()
- {
- //{'M','%','@','V','H','A','S','D','W','O'}
- Restart=0;
- Reported=0;
- Source[0]='1';Source[1]='2';Source[2]='3';Source[3]='4';Source[4]='5';Source[5]='6';Source[6]='7';Source[7]='8';Source[8]='9';Source[9]='O';
- system("cls");
- played=1;
- load();
- //CrewLeft>3&&Evil[9]==1||ImposterLeft>0&&Evil[9]==0
- while(1)
- {
- ScreenUpdate();
- if(Restart==1)
- {
- system("cls");
- cout<<"Creating new game..."<
"Press any key to continue"< - load();
- getch();
- main();
- }
- }
- if(Evil[9]==1)cout<<"Imposter won!";
- else cout<<"crew won!";
- cout<
"Press any key to restart"< - getch();
- main();
- }
代码已经长起来了!
中级逻辑
这是整个游戏最难的部分,一旦搞定这个,我们剩下的就很轻松了
首先,当然是把之前MobUpdate的函数全部弄完
这里我就推荐你们自己写,别抄样例代码了,要不然后面会很难看懂的
我就告诉你们要写什么:
1.void Kill()击杀
2. void BodyReport()尸体报告
3.void Report()紧急会议
如果你真的写出来了,那么这里有一个样例代码:
- #include
- using namespace std;
- char world[20][40];
- const int PlayerCnt=10;
- char Source[PlayerCnt]={'M','%','@','V','H','A','S','D','W','O'};
- int MobX[PlayerCnt];
- int MobY[PlayerCnt];
- bool Alive[PlayerCnt];
- bool Evil[PlayerCnt];
- bool played=0,Killing;
- int CrewLeft,ImposterLeft;
- bool Restart=0,Reported;
- string str;
- void load()
- {
- srand(time(0));
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- if(i==0||i==19||j==0||j==39)
- {
- world[i][j]='#';
- }else world[i][j]=' ';
- }
- }
- for(int i=0;i
- {
- Evil[i]=0;
- Alive[i]=1;
- MobX[i]=rand()%36+1;
- MobY[i]=rand()%16+1;
- }
- for(int i=0;i<3;i++)Evil[rand()%PlayerCnt]=1;
- }
- /************************
- Define functions here |
- ************************/
- /*void Mission()
- {
- for(int i=0;i<10;i++)
- {
- if(MobX[i]==)
- }
- }*/
- void Report(int num)
- {
- system("cls");
- cout<<"No."<
" made a emergency meeting"< - cout<<"Conversation is going to start"<
- cout<<"_______________________________"<
- srand(time(0));
- int cnt=rand()%10+3,r=rand()%20*100;
- for(int i=0;i
- {
- cout<<"No."<<rand()%9+1<<" : ";
- if(rand()%2==0)
- {
- if(rand()%2==0)
- {
- cout<<"Why someone called a report again?!"<
- }else
- {
- cout<<"Darn!"<
- }
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"He's lying!"<
- }
- else
- {
- cout<<"I think I know who's the imposter"<
- }
- }
- Sleep(r);
- r=rand()%20*100;
- }
- system("cls");
- cout<<"Voting"<
- cout<<"_________________________"<
- for(int i=0;i<9;i++)
- {
- cout<<"No."<1<<" has voted"<
- r=rand()%20*100;
- Sleep(r);
- }
- cin>>cnt;
- if(rand()%5==0)
- {
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- }else
- {
- cnt=rand()%10+1;
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- }
- Sleep(3000);
- }
- void TryMove()
- {
- char key;
- key=0;
- Killing=0;
- if(_kbhit()&&Alive[9]==1)
- {
- key=getch();
- if(key=='w'&&MobY[PlayerCnt-1]<18)MobY[PlayerCnt-1]++;
- if(key=='s'&&MobY[PlayerCnt-1]>1)MobY[PlayerCnt-1]--;
- if(key=='a'&&MobX[PlayerCnt-1]>1)MobX[PlayerCnt-1]--;
- if(key=='d'&&MobX[PlayerCnt-1]<38)MobX[PlayerCnt-1]++;
- if(key=='r'&&Reported==0)Report(10);
- if(key==' '&&Alive[9]==0)Restart=1;
- }
- }
- void Kill()
- {
- srand(time(0));
- for(int i=0;i<9;i++)
- {
- for(int j=i+1;j<10;j++)
- {
- if(MobX[i]==MobX[j]&&MobY[i]==MobY[j]&&rand()%2==0)
- {
- if(Evil[i]==1&&rand()%2==0&&Alive[i]==1)
- {
- Alive[j]=0;
- Source[j]='X';
- }
- if(Evil[j]==1&&Alive[j]==1)
- {
- if(j==10&&Killing==1)
- {
- Alive[i]=0;
- Source[i]='X';
- }else if(rand()%2==0)
- {
- Alive[i]=0;
- Source[i]='X';
- }
- }
- }
- }
- }
- if(Alive[9]==0)Source[9]='X';
- }
- void BodyReport()
- {
- srand(time(0));
- int cnt=rand()%10+3,r=rand()%20*100;
- for(int i=0;i<9;i++)
- {
- for(int j=i+1;j<10;j++)
- {
- if(MobX[j]==MobX[i]&&MobY[j]==MobY[i])
- {
- if(Source[i]=='X'&&Evil[j]==0)
- {
- Source[i]='+';
- system("cls");
- cout<<"No."<
" found the dead body of No."<"!"< - cout<<"Conversation is going to start"<
- int r=100;
- cout<<"____________________________________"<
- Sleep(1000);
- for(int i=0;i
- {
- cout<<"No."<<rand()%9+1<<" : ";
- if(rand()%2==0)
- {
- if(rand()%2==0)
- {
- cout<<"I'm not doing anything!";
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"What's our disicion?";
- }
- else
- {
- cout<<"I have no idea...";
- }
- }
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"I guess No."<<rand()%10+1<<" is the imposter!";
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"Vote No."<<rand()%10+1<<"! I saw him killing No."<<rand()%10+1;
- }
- else
- {
- cout<<"So which crew should we pick?";
- }
-
- }
- }
- // cout<<"";
- cout<
- Sleep(r);
- r=rand()%20*100;
- }
- cout<<"Your turn:"<
- str="1";
- getline(cin,str);
- if(rand()%2==0)
- {
- cout<<"No."<<rand()%10+1<<" : "<<"Hmmmm, I agree with you";
- }
- system("cls");
- cout<
"Press any key to vote"< - for(int i=0;i<9;i++)
- {
- cout<<"No."<1<<" has voted"<
- r=rand()%20*100;
- Sleep(r);
- }
- cin>>cnt;
- if(rand()%5==0)
- {
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- Source[i]='+';
- }else
- {
- cnt=rand()%10+1;
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- Source[i]='+';
- }
- //MobX[9]++;\]
- Sleep(3000);
- }
- if(Source[j]=='X'&&Evil[i]==0)
- {
- Source[j]='+';
- system("cls");
- cout<<"No."<" found the dead body of No."<
"!"< - cout<<"Conversation is going to start"<
- int r=100;
- cout<<"____________________________________"<
- Sleep(1000);
- for(int i=0;i
- {
- cout<<"No."<<rand()%9+1<<" : ";
- if(rand()%2==0)
- {
- if(rand()%2==0)
- {
- cout<<"I'm not doing anything!";
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"What's our disicion?";
- }
- else
- {
- cout<<"I have no idea...";
- }
- }
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"I guess No."<<rand()%10+1<<" is the imposter!";
- }
- else
- {
- if(rand()%2==0)
- {
- cout<<"Vote No."<<rand()%10+1<<"! I saw him killing No."<<rand()%10+1;
- }
- else
- {
- cout<<"So which crew should we pick?";
- }
-
- }
- }
- // cout<<"";
- cout<
- Sleep(r);
- r=rand()%20*100;
- }
- cout<<"Your turn:"<
- str="1";
- getline(cin,str);
- if(rand()%2==0)
- {
- cout<<"No."<<rand()%10+1<<" : "<<"Hmmmm, I agree with you";
- }
- system("cls");
- cout<
"Press any key to vote"< - for(int i=0;i<9;i++)
- {
- cout<<"No."<1<<" has voted"<
- r=rand()%20*100;
- Sleep(r);
- }
- cin>>cnt;
- if(rand()%5==0)
- {
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- Source[j]='+';
- }else
- {
- cnt=rand()%10+1;
- cout<<"No."<
" was thrown out of the ship"< - Alive[cnt-1]=0;
- Source[j]='+';
- }
- //MobX[9]++;\]
- Sleep(3000);
- }
- }
- }
-
- }
- }
- void MobUpdate()
- {
- TryMove();
- srand(time(0));
- if(rand()%30==0)
- {
- Report(rand()%10+1);
- }
- for(int i=0;i
-1;i++) - {
- if(Alive[i]==1)
- {
- if(rand()%3==0)MobX[i]+=rand()%3-1;
- if(rand()%3==0)MobY[i]+=rand()%3-1;
- }
- if(MobX[i]<1)MobX[i]=1;
- if(MobX[i]>38)MobX[i]=38;
- if(MobY[i]<1)MobY[i]=1;
- if(MobY[i]>18)MobY[i]=18;
- }
- Kill();
- BodyReport();
- }
- void CheckAlive()
- {
- CrewLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Source[i]!='X')CrewLeft++;
- }
- ImposterLeft=0;
- for(int i=0;i<10;i++)
- {
- if(Evil[i]==1&&Source[i]!='X')ImposterLeft++;
- }
- }
- void ScreenUpdate()
- {
- MobUpdate();
- system("cls");
- bool x=0;
- for(int i=0;i<20;i++)
- {
- for(int j=0;j<40;j++)
- {
- //cout<
- x=0;
- for(int k=0;k
- {
- if(MobX[k]==j&&19-MobY[k]==i)
- {
- x=1;
- cout<
- break;
- }
- }
- if(x==0)cout<
- }
- cout<
- }
- CheckAlive();
- cout<<"Crews left: "<
"\tImposters left: "< - if(Evil[9]==1)cout<<"You're the imposter No.10"<
- else cout<<"You're the crew No.10"<
- if(Alive[9]==0)
- {
- char key;
- cout<<"You're Dead"<
"Press space bar to restart"; - }else if(Reported==0)cout<<"You can Press R to report once"<
- Sleep(200);
- }
- int main()
- {
- //{'M','%','@','V','H','A','S','D','W','O'}
- Restart=0;
- Reported=0;
- Source[0]='1';Source[1]='2';Source[2]='3';Source[3]='4';Source[4]='5';Source[5]='6';Source[6]='7';Source[7]='8';Source[8]='9';Source[9]='O';
- system("cls");
- played=1;
- load();
- //CrewLeft>3&&Evil[9]==1||ImposterLeft>0&&Evil[9]==0
- while(1)
- {
- ScreenUpdate();
- if(Restart==1)
- {
- system("cls");
- cout<<"Creating new game..."<
"Press any key to continue"< - load();
- getch();
- main();
- }
- }
- if(Evil[9]==1)cout<<"Imposter won!";
- else cout<<"crew won!";
- cout<
"Press any key to restart"< - getch();
- main();
- }
恭喜我们写出了434行的代码!
但是出于本文章字数太多,现在已经打不了字了
所以欲知后事如何,且听下回分解~
注:现在我的电脑已经被这个14108个字的文档卡爆了!
-
相关阅读:
部署和使用dinky问题总结
952. 按公因数计算最大组件大小 : 枚举质因数 + 并查集运用题
走进Redis:哨兵集群
Java 类和对象
[Linux]进程概念
docker报错问题解决:Error Invalid or corrupt jarfile app.jar
【云原生】玩转docker实战(二):单机环境的容器编排工具docker-compose
java毕业生设计原创网络文学管理系统计算机源码+系统+mysql+调试部署+lw
ROSCAR试运行
【QEMU系统分析之启动篇(十一)】
-
原文地址:https://blog.csdn.net/BurningJames/article/details/132653171