魔塔小游戏(C语言)

简介: 地图大家可以自己根据自己的想法进行改变,或者说商店和属性不满意都可以改哦~
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#pragma comment(lib,"Winmm.lib")
#define NUM_PEO 6
#define ROW 20
#define COL 100
typedef struct character
{
  char name[20];
  int attack;
  int defense;
  int life;
}chara;
void game();
void map1();
void move(int x, int y, char m[ROW][COL]);
void story();
void buy(chara peo[],int choice, int shop_gold[20][4]);
void Init_shop(int shop_gold[20][4]);
void rule();
void tmenu();
void menu();
void line();
void menu1();
void menu2();
void menu3();
int battle(int num);
void shop();
void peoatt(chara peo[], int choice);
void Init(chara peo[]);
int judge(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
void judge_(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
void Display(char m[ROW][COL]);
void judge_K(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
void exchange(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
void judge_$(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
void judge_apple(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
int judge_door(char m[ROW][COL], int now_x, int ori_x, int now_y,
                  int ori_y);
int judge_monster(char m[ROW][COL], int now_x, int ori_x, int now_y,
                  int ori_y);
int judge_jin(char m[ROW][COL], int now_x, int ori_x, int now_y,
                  int ori_y);
void judge_shop(char m[ROW][COL], int now_x, int ori_x, int now_y, 
                  int ori_y);
#include "game.h"
int x = 1;
int y = 1;
int K = 0;
int gold = 5;
chara peo[NUM_PEO];
int choice = 0;
//商店物品的价格,攻击,生命,防御
int shop_gold[20][4] = { 0 };
int monster[5][4] = { {1,1,0,1},
            {5, 3,1, 5},
            {15,7,3,14},
            {31,15,7,29},
            {0,31,15,60} };
int main() 
{
  story();
  //PlaySound(TEXT("D:\\Desktop\\110期\\test\\Test_6_12\\Test_6_12\\苏星婕 - 听悲伤的情歌.wav"), NULL, SND_FILENAME | SND_ASYNC); // 这里是你文件的路径
  PlaySound(TEXT("D:\\Desktop\\110期\\test\\Test_6_12\\Test_6_12\\
             庄东茹 - 时间更改.wav"), NULL, SND_FILENAME | SND_ASYNC); 
             // 这里是你文件的路径
  //PlaySound(TEXT("D:\\Desktop\\110期\\test\\Test_6_12\\Test_6_12\\苏星婕 - 听悲伤的情歌.wav"), NULL, SND_FILENAME | SND_ASYNC); // 这里是你文件的路径
  system("pause");
  srand((unsigned int)time(NULL));
  int N = 0;
  rule();
  tmenu();
  menu();
  Init(peo);
  printf("请选择初始人物: (1 2 3)\n");
  scanf("%d", &choice);
  choice -= 1;
  system("cls");
  Init_shop(shop_gold);
  while (1)
  { 
    Sleep(1000);
    rule();
    tmenu();
    printf("#你要做什么?\n");
    scanf("%d", &N);
    switch (N)
    {
    case 1:
      shop();
      buy(peo, choice, shop_gold);
      break;
    case 2:
      peoatt(peo,choice);
      break;
    case 3:
      game();
    case 0: 
      exit(-1);
      break;
    default:
      printf("骚年,按错喽,公主不是这么救的\n");
    }
  }
  menu();
  return 0;
}
#include "game.h"
void story()
{
  char story[] = "三百年前,有一位漂亮可爱的公主在中北大陆生活着,
                   可是突然有一天,一头猥琐的魔龙XXX来到这片大陆
                   掳走了公主,而你正是这位公主的倾慕者,你决心要打
                   败魔龙,救回公主..................";
  int len = strlen(story);
  for (int i = 0; i < len; i++)
  {
    printf("%c", story[i]);
    if ((i + 1) % 30 == 0)
    {
      printf("\n");
    }
    Sleep(90);
  }
  printf("\n");
  Sleep(1000);
}
void rule()
{
  printf("                          szl制作\n");
  line();
  printf("你需要通过 w a s d 四个键来控制人物O的走动\n");
  printf("K:钥匙  *:属性果实  >: 通往下层的楼梯  —: 锁着的门\n");
  printf("$:金币  <:回到上层  &:商人\n");
  printf("A: 小怪兽  (攻: 1   防: 0   命: 1)         
            B: 中怪兽(攻: 3   防: 1   命: 5)\n");
  printf("C: 大怪兽  (攻: 7   防: 3   命: 14)         
            D: 巨兽  (攻: 15  防: 7   命: 29)\n");
  printf("X: BOSS魔龙(攻: 31  防: 15  命: 60)\n");
  printf("击杀可得金币: 1 5 15 31\n");
  line();
  printf("\n");
}
void tmenu()
{
  printf("************************************************\n");
  printf("******      1. 进入商店     2.查看人物    ******\n");
  printf("******      3. 进入魔窟     0.退出游戏    ******\n");
  printf("************************************************\n");
}
void menu()
{
  printf("请选择初始人物:\n");
  menu1();
  menu2();
  menu3();
}
void menu1()
{
  line();
  printf("马保国\n");
  printf("攻: 1  防: 1  命: 6\n");
  line();
}
void menu2()
{
  line();
  printf("蔡徐坤\n");
  printf("攻: 2  防: 2  命: 3\n");
  line();
}
void menu3()
{
  line();
  printf("YOU\n");
  printf("攻: 1  防: 3  命: 3\n");
  line();
}
void line()
{
  printf("------------------------------------------------
             ---------------------\n");
}
void shop()
{
  line();
  printf("地精@@: 你想要点什么?\n");
  printf("********************************************************
            **********************************\n");
  printf("\n");
  printf("加攻击\n");
  printf("1. 铁拳套  +1  价格:1金币          
            2. 银拳套  +3  价格:4金币\n");
  printf("3. 金拳套  +7  价格:10金币         
            4. 究极拳  +20 价格:30金币\n");
  printf("\n");
  printf("加生命和防御\n");
  printf("5. 麻衣           +1  +0   价格:1金币        
            6. 布衣    +3 +1    价格:4金币\n");
  printf("7. 精致的羽绒服   +6  +2   价格:10金币       
            8. 武道服  +14 +4   价格:30金币\n");
  printf("9. 圣衣           +30 +10  价格:50金币\n");
  printf("\n");
  printf("*****************************************************
            **************************************\n");
  line();
  printf("\n");
}
void Init_shop(int shop_gold[20][4])
{
  for (int i = 0; i < 8; i+=4)
  {
    shop_gold[i][0] = 1;
    shop_gold[i + 1][0] = 4;
    shop_gold[i + 2][0] = 10;
    shop_gold[i + 3][0] = 30;
  }
  shop_gold[8][0] = 50;
  //攻击
  shop_gold[0][1] = 1;
  shop_gold[1][1] = 3;
  shop_gold[2][1] = 7;
  shop_gold[3][1] = 20;
  //生命
  shop_gold[4][2] = 1;
  shop_gold[5][2] = 3;
  shop_gold[6][2] = 6;
  shop_gold[7][2] = 14;
  shop_gold[8][2] = 30;
  //防御
  shop_gold[5][3] = 1;
  shop_gold[6][3] = 2;
  shop_gold[7][3] = 4;
  shop_gold[8][3] = 10;
}
void buy(chara peo[], int choice, int shop_gold[20][4])
{
  extern int gold;
  printf("当前金币数量: %d\n", gold);
  printf("你需要点什么?(输入对应数字)\n");
  int name = 0;
  scanf("%d", &name);
  if (gold >= shop_gold[name - 1][0])
  {
    gold -= shop_gold[name - 1][0];
    peo[choice].attack += shop_gold[name - 1][1];
    peo[choice].defense += shop_gold[name - 1][3];
    peo[choice].life += shop_gold[name - 1][2];
    shop_gold[name - 1][1] = 0;
    shop_gold[name - 1][2] = 0;
    shop_gold[name - 1][3] = 0;
  }
  else
  {
    printf("金币不足还想买,想屁吃?\n");
  }
  printf("当前金币数量: %d\n", gold);
}
void peoatt(chara peo[], int choice)//人物属性
{
  printf("%s\n", peo[choice].name);
  printf("攻击: %d\n", peo[choice].attack);
  printf("防御: %d\n", peo[choice].defense);
  printf("生命: %d\n", peo[choice].life);   
}
void Init(chara peo[])//初始化
{
  strcpy(peo[0].name, "马保国");
  peo[0].attack = 1;
  peo[0].defense = 1;
  peo[0].life = 6;
  strcpy(peo[1].name, "蔡徐坤");
  peo[1].attack = 2;
  peo[1].defense = 2;
  peo[1].life = 3;
  strcpy(peo[2].name, "YOU");
  peo[2].attack = 1;
  peo[2].defense = 3;
  peo[2].life = 3;
}
void game()
{
  PlaySound(TEXT("D:\\Desktop\\110期\\test\\Test_6_12
    \\Test_6_12\\苏星婕 - 听悲伤的情歌.wav"), NULL, SND_FILENAME | SND_ASYNC);
  //PlaySound(TEXT("D:\\Desktop\\110期\\test\\Test_6_12\\Test_6_12\\庄东茹 - 时间更改.wav"), NULL, SND_FILENAME | SND_ASYNC); // 这里是你文件的路径
  map1();
}
void map1()
{
  char m[ROW][COL] =
  {
    "#########################################################",
    "#OA# *   B   #",
    "# K########  #",
    "#  #         #",
    "#AA#A######A #",
    "# $#-#K      #",
    "#    #     * #", 
    "# B#-#   ################################################",
    "#CK#$#---#################################################",
    "#### # BBB###############################################",
    "#& # # BKB###############################################",
    "#  # # BBB###A  #########################################",
    "# C# #-######   ######################################",
    "#    # ##    B  ############################################",
    "###### ## ############################################",
    "#*C $#    ##################################################",
    "####   ##################################################",
    "#########################################################"
  };
  extern int x;
  extern int y;
  move(x, y, m);
}
void move(int x, int y, char m[ROW][COL])
{
  while (1)
  {
    system("cls");
    printf("\n");
    printf("\n");
    printf("\n");
    Display(m);
    char ch = _getch();
    if (ch == 'w' && ch != '#')
    {
      int a = judge(m, x - 1, x, y, y);
      if (a == 1)
      {
        x--;
      }   
    }
    else if(ch == 's' && ch!= '#')
    {
      int a = judge(m, x + 1, x, y, y);
      if (a == 1)
      {
        x++;
      }   
    }
    else if(ch == 'a' && ch != '#')
    {
      int a = judge(m, x, x, y - 1, y);
      if (a == 1)
      {
        y--;
      }   
    }
    else if (ch == 'd' && ch != '#')
    {
      int a = judge(m, x, x, y + 1, y);
      if (a == 1)
      {
        y++;
      }   
    }
    else
    {
      printf("看清路再走!\n");
      Sleep(1500);
    }
  }
}
void Display(char m[ROW][COL])
{
  for (int i = 0; i < ROW; i++)
  {
    printf("%s\n", m[i]);
  }
}
int judge(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  int a = judge_jin(m, now_x, ori_x, now_y, ori_y);
  judge_(m, now_x, ori_x, now_y, ori_y);
  judge_K(m, now_x, ori_x, now_y, ori_y);
  judge_$(m, now_x, ori_x, now_y, ori_y);
  judge_apple(m, now_x, ori_x, now_y, ori_y);
  int g = judge_door(m, now_x, ori_x, now_y, ori_y);
  int h = judge_monster(m, now_x, ori_x, now_y, ori_y);
  judge_shop(m, now_x, ori_x, now_y, ori_y);
  return (a && g && h);
}
void judge_shop(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern chara peo[NUM_PEO];
  extern int choice;
  extern int shop_gold[20][4];
  if (m[now_x][now_y] == '&')
  {
    shop();
    buy(peo, choice, shop_gold);
    peoatt(peo, choice);
    Sleep(2000);
  }
}
int judge_jin(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  if (m[now_x][now_y] == '#')
  {
    printf("撞墙了!(#`O′)\n");
    Sleep(1500);
    return 0;
  }
}
int judge_monster(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern int monster[5][4];
  extern int gold;
  if (m[now_x][now_y] >= 'A' && m[now_x][now_y] <= 'D')
  {
    int num = 0;
    num = m[now_x][now_y] - 'A';
    int ret = battle(num);
    if (ret == 1)
    {
      printf("%c死了...\n", 'A' + num);
      printf("战斗胜利!\n");
      printf("获得金币:%d\n", monster[num][0]);
      Sleep(500);
      gold += monster[num][0];
      printf("当前金币:%d\n",gold);
      Sleep(2000);
      m[now_x][now_y] = ' ';      
      exchange(m, now_x, ori_x, now_y, ori_y);
      return 1;
    }
    else
    {
      printf("战斗失败!\n");
      Sleep(1500);
      return 0;
    }   
  }
  return 1;
}
int battle(int num)
{
  extern int choice;
  extern int monster[5][4];
  extern chara peo[NUM_PEO];
  int ori_PH = peo[choice].life;
  int mon_PH = monster[num][3];
  int flag = 0;
  printf("战斗开始!\n");
  printf("进行综合素质比对ing......\n");
  if ((peo[choice].attack + peo[choice].defense + ori_PH) > (monster[num][1] + monster[num][2] + mon_PH))
  {
    flag = 1;
    printf("--->\n");
    printf("你的三值素质更高,你先出手!\n");
  }
  else
  {
    flag = 0;
    printf("--->\n");
    printf("怪物的的三值素质更高,它先出手!\n");   
  }
  int count = 0;
  while (ori_PH > 0 && mon_PH > 0 && count <= 20)
  {   
    count++;
    if (flag == 1)
    {     
      if (peo[choice].attack - monster[num][2] < 0)
      {
        printf("%s对%c造成%d伤害!\n", peo[choice].name, 
                num + 'A', 0);
      }
      else
      {
        printf("%s对%c造成%d伤害!\n", peo[choice].name, num + 'A', peo[choice].attack - monster[num][2]);
        mon_PH -= peo[choice].attack - monster[num][2];
      }
      if (mon_PH > 0)
      {
        if (monster[num][1] - peo[choice].defense < 0)
        {
          printf("%c对%s造成%d伤害!\n", num + 'A', 
                    peo[choice].name, 0);
        }
        else
        {
          printf("%c对%s造成%d伤害!\n", num + 'A', peo[choice].name, monster[num][1] - peo[choice].defense);
          ori_PH -= monster[num][1] - peo[choice].defense;
        }     
      }
    }
    else
    {
      if (monster[num][1] - peo[choice].defense < 0)
      {
        printf("%c对%s造成%d伤害!\n", num + 'A', peo[choice].name, 0);
      }
      else
      {
        printf("%c对%s造成%d伤害!\n", num + 'A', peo[choice].name, 
                monster[num][1] - peo[choice].defense);
        ori_PH -= monster[num][1] - peo[choice].defense;
      }
      if (peo[choice].life > 0)
      {
        if (peo[choice].attack - monster[num][2] < 0)
        {
          printf("%s对%c造成%d伤害!\n", peo[choice].name, 
                    num + 'A', 0);
        }
        else
        {
          printf("%s对%c造成%d伤害!\n", peo[choice].name, num + 'A', peo[choice].attack - monster[num][2]);
          mon_PH -= peo[choice].attack - monster[num][2];
        }     
      }
    }
  }
  if (count >= 20)
  {
    printf("你无法打败怪兽!\n");
    return 0;
  }
  if (ori_PH < 0)
  {
    return 0;
  }
  else
  {
    return 1;
  }
}
//char m[8][15], int x, int now_y, int ori_y
void judge_(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  if (m[now_x][now_y] == ' ')
  {
    exchange(m, now_x, ori_x, now_y, ori_y);
  }
}
int judge_door(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern int K;
  if (m[now_x][now_y] == '-' && K > 0)
  {
    m[now_x][now_y] = ' ';
    exchange(m, now_x, ori_x, now_y, ori_y);
    K--;
    return 1;
  }
  else if(m[now_x][now_y] == '-' && K == 0)
  {
    printf("莫得钥匙,找找钥匙再开门吧!\n");
    Sleep(1500);
    return 0;
  }
  else
  {
    return 1;
  }
}
void judge_K(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern int K;
  if (m[now_x][now_y] == 'K')
  {
    m[now_x][now_y] = ' ';
    exchange(m, now_x, ori_x, now_y, ori_y);
    K++;
  }
}
void judge_$(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern int gold;
  if (m[now_x][now_y] == '$')
  {
    m[now_x][now_y] = ' ';
    exchange(m, now_x, ori_x, now_y, ori_y);
    gold += rand() % 6 + 1;
    printf("当前金币:%d\n", gold);
    Sleep(500);
  } 
}
void judge_apple(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  extern int choice;
  extern chara peo[NUM_PEO];
  if (m[now_x][now_y] == '*')
  {
    m[now_x][now_y] = ' ';
    exchange(m, now_x, ori_x, now_y, ori_y);
    peo[choice].attack += rand() % 3 + 1;
    peo[choice].defense += rand() % 3 + 1;
    peo[choice].life += rand() % 3 + 1;
    printf("当前攻击:%d\n", peo[choice].attack);
    printf("当前防御:%d\n", peo[choice].defense);
    printf("当前生命:%d\n", peo[choice].life);
    Sleep(2500);
  }
}
void exchange(char m[ROW][COL], int now_x, int ori_x, int now_y, int ori_y)
{
  if (now_x == ori_x)
  {
    char temp = m[now_x][ori_y];
    m[now_x][ori_y] = m[now_x][now_y];
    m[now_x][now_y] = temp;
  }
  if (now_y == ori_y)
  {
    char temp = m[ori_x][now_y];
    m[ori_x][now_y] = m[now_x][now_y];
    m[now_x][now_y] = temp;
  }
}

地图大家可以自己根据自己的想法进行改变,或者说商店和属性不满意都可以改哦~

目录
相关文章
|
6天前
|
C语言
【C语言】猜数字小游戏的一步一步实现2
【C语言】猜数字小游戏的一步一步实现
|
6天前
|
算法 C语言
【C语言】猜数字小游戏的一步一步实现1
【C语言】猜数字小游戏的一步一步实现
|
6天前
|
C语言
C语言之三子棋小游戏
C语言之三子棋小游戏
|
6天前
|
C语言
C语言之实现贪吃蛇小游戏篇(2)
C语言之实现贪吃蛇小游戏篇(2)
26 1
|
6天前
|
存储 小程序 编译器
C语言之三子棋小游戏的应用
C语言之三子棋小游戏的应用
|
6天前
|
算法 编译器 C语言
C语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
35 0
|
6天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
6天前
|
人工智能 机器人 测试技术
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
【C语言】C语言实现猜单词小游戏(源码+报告)【独一无二】
|
6天前
|
存储 定位技术 C语言
基于C语言实现扫雷小游戏
本文介绍了使用C语言实现扫雷小游戏的过程。扫雷是一款经典的单机游戏,玩家需要通过点击方格来揭示数字或地雷,最终清除所有非地雷方格。实现过程中,首先定义了游戏所需的数据结构,如游戏地图、玩家信息等。然后,实现了游戏的初始化、渲染、输入处理等核心功能。在游戏逻辑方面,处理了点击事件、数字计算和胜负判断等。通过不断优化和完善,最终完成了基于C语言的扫雷小游戏实现,为玩家提供了一种简单有趣的游戏体验。
29 0
|
6天前
|
机器学习/深度学习 小程序 C语言
C语言初学者:原来我也可以实现扫雷小游戏(简易版)!
C语言初学者:原来我也可以实现扫雷小游戏(简易版)!