当你看到这篇文章,请留下你的赞赞给一个害羞的初中生信心❤
我是个敢直爽的人,讨厌假标题,直接上代码
1.双人枪战多地图版(好玩到吃鸡蛋🙃):
#include <iostream>
#include <cstdio>
#include <windows.h>
#include <conio.h>
using namespace std;
int SIZ = 20;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
HANDLE hCon;
enum Color { DARKBLUE = 1, DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE };
void SetColor(Color c) {
if (hCon == NULL)
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, c);
}
SYSTEMTIME sys;
//sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek
struct PLAYER {
int x, y;
int hp;
int gun;
int direct;
} p1, p2;
int map[1005][1005];
int abs(int x) {
if (x < 0) return -x;
return x;
}
void locate(int x, int y) {
coord.X = y - 1;
coord.Y = x - 1;
SetConsoleCursorPosition(hout, coord);
}
void print_map() {
locate(1, 1);
SetColor(GRAY);
for (int i = 1; i <= SIZ; i++) cout << "■";
locate(SIZ, 1);
for (int i = 1; i <= SIZ; i++) cout << "■";
for (int i = 2; i < SIZ; i++) {
locate(i, 1);
cout << "■";
locate(i, SIZ * 2 - 1);
cout << "■";
}
locate(SIZ + 1, 1);
SetColor(WHITE);
}
void create_tree(int x, int y) {
map[x][y] = map[x + 1][y] = map[x - 1][y] = map[x][y + 1] = map[x][y - 1] = 2;
}
void use_map(int x) {
if (x == 1) {
SIZ = 20;
SetColor(DARKGREEN);
map[16][6] = map[15][6] = map[17][6] = map[16][7] = map[16][5] = map[14][13] = map[13][12] = map[13][13] = 2;
for (int i = 2; i < SIZ; i++) {
for (int j = 2; j < SIZ; j++) {
if (map[i][j] == 2) {
locate(i, j * 2 - 1);
cout << "■";
}
}
}
SetColor(GRAY);
for (int i = 5; i <= 15; i++) {
map[i][i] = 1;
locate(i, i * 2 - 1);
cout << "■";
}
SetColor(WHITE);
} else if (x == 2) {
SIZ = 30;
SetColor(GRAY);
for (int i = 4; i <= 26; i++) {
if (i == 13 || i == 14 || i == 15) continue;
map[i][4] = map[4][i] = map[26][i] = map[i][26] = 1;
}
for (int i = 1; i <= SIZ; i++) {
for (int j = 1; j <= SIZ; j++) {
if (map[i][j] == 1) {
locate(i, j * 2 - 1);
cout << "■";
}
}
}
SetColor(DARKGREEN);
for (int i = 10; i <= 20; i++) {
if (i == 13 || i == 17) continue;
map[i][10] = map[10][i] = map[20][i] = map[i][20] = 2;
}
create_tree(5, 5);
create_tree(18, 18);
for (int i = 1; i <= SIZ; i++) {
for (int j = 1; j <= SIZ; j++) {
if (map[i][j] == 2) {
locate(i, j * 2 - 1);
cout << "■";
}
}
}
SetColor(WHITE);
}
}
void cleanbody(int x, int y);
void putbody(int x, int y, int z);
void player_init() {
p1.hp = p2.hp = 300;
p1.gun = p2.gun = 1;
p1.direct = 4;
p2.direct = 2;
p1.x = 2;
p1.y = 2;
p2.x = SIZ - 1;
p2.y = SIZ - 1;
putbody(p1.x, p1.y, 1);
putbody(p2.x, p2.y, 2);
}
void mapinit() {
for (int i = 1; i <= SIZ; i++) {
map[i][1] = map[1][i] = map[SIZ][i] = map[i][SIZ] = 1;
}
}
void init() {
printf("Use Which Map?\n");
int x;
cin >> x;
system("cls");
use_map(x);
mapinit();
print_map();
player_init();
}
void putbody(int x, int y, int z) {
if (z == 1) SetColor(BLUE);
else if (z == 2) SetColor(RED);
locate(x, y * 2 - 1);
cout << "■";
SetColor(WHITE);
}
void cleanbody(int x, int y) {
locate(x, y * 2 - 1);
cout << " ";
}
/*
LIST
direct:
w 1
a 2
s 3
d 4
gun:
usp 1
mimigun 2
awp 3
block:
void 0
stone 1
tree 2
player 3
clip 4
*/
bool judge(int x, int y) {
if (map[x][y] == 1) return false;
if (map[x][y] == 2) return false;
if (map[x][y] == 3) return false;
return true;
}
bool judge_gun(int x, int y) {
if (map[x][y] == 1) return 0;
if (map[x][y] == 2) return 0;
if (map[x][y] == 3) {
if (p1.x == x && p1.y == y) p1.hp -= 50; //此处暂时不管威力
else p2.hp -= 50;
return 0;
}
return 1;
}
int cnt;
struct Clip {
int x, y;
int derect;
int force;
int start;
bool flag;
} clip[1000000];
void create_clip(int y, int x, int a, int b) {
int X, Y;
if (y == 1) {
if (!judge_gun(a - 1, b)) return;
X = a - 1;
Y = b;
} else if (y == 2) {
if (!judge_gun(a, b - 1)) return;
X = a;
Y = b - 1;
} else if (y == 3) {
if (!judge_gun(a + 1, b)) return;
X = a + 1;
Y = b;
} else if (y == 4) {
if (!judge_gun(a, b + 1)) return;
X = a;
Y = b + 1;
}
cnt++;
GetLocalTime( &sys );
clip[cnt].start = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600;
clip[cnt].x = X;
clip[cnt].y = Y;
if (x == 1) {
clip[cnt].derect = p1.direct;
} else if (x == 2) {
clip[cnt].derect = p2.direct;
}
}
void shoot(int x) {
if (x == 1) {
create_clip(p1.direct, 1, p1.x, p1.y);
} else if (x == 2) {
create_clip(p2.direct, 2, p2.x, p2.y);
}
}
void clean_clip(int x, int y) {
locate(x, y * 2 - 1);
cout << " ";
locate(1, 1);
}
void print_clip(int x, int y, int i) {
if (clip[i].flag) {
clean_clip(x, y);
return;
}
locate(x, y * 2 - 1);
SetColor(YELLOW);
cout << "''";
locate(1, 1);
// system("pause");
}
void clipmove() {
GetLocalTime( &sys );
int t = sys.wMilliseconds + sys.wSecond * 60 + sys.wHour * 3600;
for (int i = 1; i <= cnt; i++) {
if (clip[i].flag) continue;
if (abs(clip[i].start - t) > 50) {
clip[i].start = t;
int x = clip[i].x;
int y = clip[i].y;
if (clip[i].derect == 1) {
if (!judge_gun(clip[i].x - 1, clip[i].y)) {
clip[i].flag = 1;
clean_clip(x, y);
continue;
}
clean_clip(clip[i].x, clip[i].y);
clip[i].x--;
print_clip(clip[i].x, clip[i].y, i);
} else if (clip[i].derect == 2) {
if (!judge_gun(clip[i].x, clip[i].y - 1)) {
clip[i].flag = 1;
clean_clip(x, y);
continue;
}
clean_clip(clip[i].x, clip[i].y);
clip[i].y--;
print_clip(clip[i].x, clip[i].y, i);
} else if (clip[i].derect == 3) {
if (!judge_gun(clip[i].x + 1, clip[i].y)) {
clip[i].flag = 1;
clean_clip(x, y);
continue;
}
clean_clip(clip[i].x, clip[i].y);
clip[i].x++;
print_clip(clip[i].x, clip[i].y, i);
} else if (clip[i].derect == 4) {
if (!judge_gun(clip[i].x, clip[i].y + 1)) {
clip[i].flag = 1;
clean_clip(x, y);
continue;
}
clean_clip(clip[i].x, clip[i].y);
clip[i].y++;
print_clip(clip[i].x, clip[i].y, i);
}
}
}
}
void judge_hp() {
int x = p1.hp;
int y = p2.hp;
if (x < 0 && y < 0 && x > y) swap(x, y);
if (x <= 0) {
locate(1, 1);
system("cls");
printf("GAME OVER!\nTHE WINNER IS P2!");
Sleep(5000);
printf("\n-MADE BY Floatiy-");
getch();
exit(0);
} else if (y <= 0) {
locate(1, 1);
system("cls");
printf("GAME OVER!\nTHE WINNER IS P1!");
Sleep(5000);
printf("\n-MADE BY Floatiy-");
getch();
exit(0);
}
}
void prog() {
char ch;
while (true) {
if (kbhit()) {
ch = getch();
if (ch == 'w' && judge(p1.x - 1, p1.y)) {
p1.direct = 1;
cleanbody(p1.x, p1.y);
map[p1.x][p1.y] = 0;
putbody(--p1.x, p1.y, 1);
map[p1.x][p1.y] = 3;
} else if (ch == '8' && judge(p2.x - 1, p2.y)) {
p2.direct = 1;
cleanbody(p2.x, p2.y);
map[p2.x][p2.y] = 0;
putbody(--p2.x, p2.y, 2);
map[p2.x][p2.y] = 3;
} else if (ch == 'a' && judge(p1.x, p1.y - 1)) {
p1.direct = 2;
cleanbody(p1.x, p1.y);
map[p1.x][p1.y] = 0;
putbody(p1.x, --p1.y, 1);
map[p1.x][p1.y] = 3;
} else if (ch == '4' && judge(p2.x, p2.y - 1)) {
p2.direct = 2;
cleanbody(p2.x, p2.y);
map[p2.x][p2.y] = 0;
putbody(p2.x, --p2.y, 2);
map[p2.x][p2.y] = 3;
} else if (ch == 's' && judge(p1.x + 1, p1.y)) {
p1.direct = 3;
cleanbody(p1.x, p1.y);
map[p1.x][p1.y] = 0;
putbody(++p1.x, p1.y, 1);
map[p1.x][p1.y] = 3;
} else if (ch == '5' && judge(p2.x + 1, p2.y)) {
p2.direct = 3;
cleanbody(p2.x, p2.y);
map[p2.x][p2.y] = 0;
putbody(++p2.x, p2.y, 2);
map[p2.x][p2.y] = 3;
} else if (ch == 'd' && judge(p1.x, p1.y + 1)) {
p1.direct = 4;
cleanbody(p1.x, p1.y);
map[p1.x][p1.y] = 0;
putbody(p1.x, ++p1.y, 1);
map[p1.x][p1.y] = 3;
} else if (ch == '6' && judge(p2.x, p2.y + 1)) {
p2.direct = 4;
cleanbody(p2.x, p2.y);
map[p2.x][p2.y] = 0;
putbody(p2.x, ++p2.y, 2);
map[p2.x][p2.y] = 3;
} else if (ch == '0') {
shoot(2);
} else if (ch == ' ') {
shoot(1);
}
Sleep(20);
}
clipmove();
judge_hp();
}
}
void welcome() {
printf("操作方法:\n玩家1 wasd控制移动,空格攻击\n玩家2 数字小键盘4568控制移动,0攻击\n");
Sleep(2000);
}
int main() {
welcome();
GetLocalTime( &sys );
init();
prog();
return 0;
}
不错不错,先去试试👍
2.杀手小游戏:
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <windows.h>
int main()
{
srand(time(NULL));
int b, p, x, c, d, e = 0, f = 0, g, h = 0, i = 1, j, l, m, n = 5, o = 0;
printf("选择你的杀手等级(1-5)\n");
scanf("%d", &b);
printf("\n");
int a[6] = {0, 1, 2, 3, 4, 5}, k[10] = {0};
AA: while (n != 1)
{
if (i == 1)
{
Sleep (1000);
printf("存活者:%d %d %d %d %d\n\n", a[1], a[2], a[3], a[4], a[5]);
}
if (i == 6) i = 1;
if (a[i] == 0)
{
i++;
continue;
}
Sleep(1000);
printf("轮到%d号\n", i);
if (i == b)
{
Sleep(1000);
printf("选择你的目标:%d %d %d %d %d\n", a[1], a[2], a[3], a[4], a[5]);
scanf("%d", &p);
}
else
do
p = rand() % 5 + 1;
while (p != i);
while (a[p] == 0 || p == i) p = rand() % 5 + 1;
Sleep(1000);
printf("%d号选择了%d号\n", i, p);
Sleep(1000);
printf("%d号掷出了%d\n", i, c = rand() % 6 + 1);
if (i >= c)
{
a[p] = 0;
Sleep(1000);
printf("%d号杀死了%d号\n\n", i, p);
n--;
}
else {Sleep(1000); printf("%d号没有杀死目标\n\n", i);}
if (i == 5 && a[p] == 0)
{
if (rand() % 3 == 1 || rand() % 3 == 2)
{
if (p == 1 && f <= 2)
{
Sleep(1000); printf("5号无视1号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
f = 3;
}
if (p == 2 && h == 0)
{
Sleep(1000); printf("5号无视2号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
h = 1;
}
if (p == 3 && o == 0)
{
Sleep(1000); printf("5号无视3号复活权\n");
Sleep(800); printf("直接将其杀死\n\n");
o = 1;
}
}
}
if (a[1] == 0)
{
if (f <= 2)
{
Sleep(1000);
printf("1号使用复活权\n");
f++; n++; a[1] = 1;
if (f == 1)
{
do g = rand() % 5 + 1;
while (a[g] == 0 || g == 1);
Sleep(1000); printf("并随机诅咒了%d号\n", g);
Sleep(1000); printf("%d号死了\n\n", g);
a[g] = 0; n--;
}
}
else a[1] = 0;
}
if (a[2] == 0 && h == 0)
{
Sleep(1000);
printf("2号使用复活权\n");
n++;
a[2] = 2;
do m = rand() % 5 + 1;
while (a[m] == 0 || m == 2);
Sleep(1000); printf("并随机诅咒了%d号\n", m);
if (rand() % 2 == 1)
{
a[m] = 0;
Sleep(1000); printf("%d号死了\n\n", m);
n--;
}
else
{
Sleep(1000); printf("但他没死\n\n");
}
h = 1;
}
if (a[3] == 0 && o == 0)
{
Sleep(1000); printf("3号使用复活权\n\n"); a[3] = 3; o++; n++;
}
if (i == 4 && a[p] == 0)
{
if (n == 1) break;
else
{
Sleep(1000); printf("4号使用再次攻击权\n");
goto AA;
}
}
if (a[b] == 0 && e == 0)
{
if (n == 1) break;
printf("你死了,是否继续?是按0,否按1\n");
scanf("%d", &x);
if (x == 1) break;
else e = 1;
}
i++;
}
for (j = 1; j <= 5; j++) if (a[j] != 0) d = j;
if (x != 1)
{
Sleep(800);
printf("%d号赢了", d);
}
else
printf("游戏结束");
return 0;
}
单机桌游,有效缓解紧张与尴尬。
源码免费开放,赚了赚了。🤗
3.老规矩,经典贪吃蛇走一波。
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
//方向键的ASCLL值:上72,左75,右77,下80
//背景颜色的代码: 0=黑色 1蓝色 2 绿色 3湖蓝色 4红色 5紫色 6黄色 7白色 8灰色 9淡蓝色
//**改变当前光标方块的背景颜色和字体颜色**//
void BackGround(unsigned int ForeColor = 7, unsigned int BackGroundColor = 0) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台的句柄
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//改变当前光标的背景和字体颜色
}
//**改变光标的位置**//
void gotoxy(int x, int y) {
HANDLE handle;
COORD coord; //获取坐标轴结构体
coord.X = x;
coord.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄,值为-11
SetConsoleCursorPosition(handle, coord); //移动光标到x,y处
}
//**初始化地图数据**//
void restart(int bk[20][20], int look[4], int move[20][20]) {
//bk为总的地图数据记录整个地图,为1时表示墙体,为2时表示果实,为3时表示蛇
//look记录数据,为0时表示朝向,为1时表示长度,为3时表示胜负情况,为4表示分数
//move记录蛇走过的路程,用来打印蛇时判断用
int pp, qq; //用来记录获取的随机坐标
//接下来要初始化整个地图//
for (int i = 0; i <= 16; i++)
for (int j = 0; j <= 16; j++) {
if (i == 0 || i == 16 || j == 0 || j == 16) bk[i][j] = 1;//1表示墙体
else bk[i][j] = 0; //0表示什么都没有
move[i][j] = 0; //该数组用来记录蛇移动的轨迹
}
//将蛇初始化在8,8坐标上
bk[8][8] = 3;
move[8][8] = 1;//则此时8,8,上的轨迹就应该记录为1
move[0][0] = 1;//用此来记录步数
pp = rand() % 15 + 1;//范围是1-15
qq = rand() % 15 + 1;
bk[pp][qq] = 2;//表示这个位置有果实了
look[0] = 1;//表示朝向,向上
look[1] = 1;//表示长度
look[2] = 0;//当为1是表示失败
look[3] = 0;//记录得分
//接下来要绘制地图//
for (int i = 0; i <= 16; i++)
for (int j = 0; j <= 16; j++) {
gotoxy(i * 2, j);//光标移动,每个光标都是矩形
switch (bk[i][j]) {
case 0:
BackGround(0, 0);
break;//如果没有东西打印黑色
case 1:
BackGround(0, 1);
break;//墙打印蓝色
case 2:
BackGround(0, 2);
break;//果实打印绿色
case 3:
BackGround(0, 3);
break;//蛇打印湖蓝色
default:
break;
}
printf(" ");//地图中直接就是涂空格符
}
//接下来要显示积分//
gotoxy(35, 0);
BackGround(7, 0);//用白字黑底打印
printf("现在得分是:%d,请再接再厉!^_^", look[2]);
}
//**运动主体**//
void map(int bk[20][20], int look[4], int xy[2], int move[20][20]) {
//bk是地图信息,look作数据记录,xy记录坐标,move记录蛇的运动轨迹
int b[10], qq = 0, pp = 0; //b用来吸收输入,qq和pp用来随机初始化果实坐标
if (kbhit()) {//记录按下的是哪个方向键
b[0] = getch();//用b来记录
if (b[0] == 224) b[0] = getch();//如果为224表示为方向键,但是要再一次获取才行
if (b[0] == 72 && look[0] != 2)
//如果输入的为上并且朝向不为下
look[0] = 1;
if (b[0] == 80 && look[0] != 1)
look[0] = 2;
if (b[0] == 75 && look[0] != 4)
look[0] = 3;
if (b[0] == 77 && look[0] != 3)
look[0] = 4;
}
switch (look[0]) {
case 1:
//往上走
xy[1]--;
break;
case 2:
//往下走
xy[1]++;
break;
case 3:
//往左走
xy[0]--;
break;
case 4:
//往右走
xy[0]++;
break;
}
//接下来蛇就开始走动了//
move[0][0]++;//蛇的步数加一
move[xy[0]][xy[1]] = move[0][0];//记录当前格子中蛇的轨迹
gotoxy(35, 2);
BackGround(7, 0);
printf("横坐标:%d,纵坐标:%d", xy[0], xy[1]);
gotoxy(xy[0] * 2, xy[1]);//这里蛇头就往前移动了
BackGround(0, 3);//与蛇体一个颜色
printf(" ");
//如果吃了果实//
if (bk[xy[0]][xy[1]] == 2) {
look[2]++;//分数加一
look[1]++;//长度加一
//更新分数
gotoxy(35, 0);
BackGround(7, 0);
printf("现在得分是:%d,请再接再厉!^_^", look[2]);
while (bk[pp][qq] != 0) {
pp = rand() % 15 + 1;
qq = rand() % 15 + 1;
}
bk[pp][qq] = 2;//将这个地方变为果实
gotoxy(pp * 2, qq);
BackGround(0, 2);
printf(" ");
}
//如果撞了墙或者自己//
if (bk[xy[0]][xy[1]] == 1 || bk[xy[0]][xy[1]] == 3) {
look[3] = 1;//表示已经输了
gotoxy(6, 6);
BackGround(7, 0);
printf("你输了,最后得分:%d", look[2]);
}
bk[xy[0]][xy[1]] = 3;//使这个位置变成蛇
//接下来要检测蛇然后刷新蛇的位置//
for (int i = 0; i <= 16; i++)
for (int j = 0; j <= 16; j++) {
if (move[i][j] == move[xy[0]][xy[1]] - look[1]) {
//如果符合这个条件,则表示蛇已经移动出这个位置了
//要删除这个位置的蛇尾巴
//一次只有一个方块会符合要求吧?
bk[i][j] = 0;
gotoxy(i * 2, j);
BackGround(0, 0);
printf(" ");
break;//一次只找一个
}
}
end:;
}
int main() {
int bk[20][20], xy[2], move[20][20], look[4];
xy[1] = xy[0] = 8;
srand((unsigned) time(NULL));//初始化随机种子
system("pause");
restart(bk, look, move);
while (look[3] == 0) {
Sleep(200);//休眠400ms一次
map(bk, look, xy, move);
}
system("pause");
printf("游戏结束,谢谢游玩!^_^");
return 0;
}
这个贪吃蛇与我之前玩过的那些bug穷出的贪吃蛇完全不一样,
色彩绚丽,单指操作轻松,效果流畅,难度适中,太好玩了。
当你无聊在家,轻松打开它,从此与无聊说:886;
好了,本期代码分享差不多就结束了,喜欢的朋友动动你的手指,
点点关注,私信我,更多有趣代码,期待你的发掘。
还是那句话:
当你看到这篇文章,请留下你的赞赞给一个害羞的初中生信心❤
奥里给,我才不干它。😁😁😁
更多推荐
C++小游戏源代码,是的,你没有看错,没有代码我:奥里给干了它。
发布评论