Всем Хай!
Время сдачи работ на конкурс подошло к концу и я наконец могу опубликовать своё решение xD
Время сдачи работ на конкурс подошло к концу и я наконец могу опубликовать своё решение xD
Суть игры: Два игрока, по очереди, берут спички от 1 до 5. Выигрывает тот, кто возьмёт последнюю спичку. Реализация игры с компьютером.
Выигрышная стратегия: Для того, чтобы выиграть - нужно отнимать остаток от деления на 6.
Команды реализованы на zcmd, следовательно вам нужно добавить эти Include'ы:
PHP:
#include <zcmd>
#include <sscanf2>
PHP:
#define DialogID 1
PHP:
new Matches [MAX_PLAYERS];
PHP:
CMD:matches(playerid, params[] )
{
ShowPlayerDialog(playerid, DialogID, DIALOG_STYLE_INPUT, "Ним", "Введите кол-во спичек:", "V", "X");
return true;
}
PHP:
if(dialogid == DialogID)//Юзайте switch, если оно требует. Тут просто 1 диалоги я заюзал так
{
new string[64];
if(!response) return true;
Matches[playerid] = strval(inputtext);//Устанавливаем количество спичек
SendClientMessage(playerid, 0xFFFFFFAA, "Введите: /take [1-5]");
format(string, sizeof string, "Количество спичек: %d", strval(inputtext));
SendClientMessage(playerid, 0xFFFFFFAA, string);
return true;
}
PHP:
CMD:take(playerid, params[] )
{
new string[64];
//Ход Игрока
if(Matches[playerid] == 0) return false;//Если не начали игру
if(Matches[playerid] < params[0]) return false;//Если не указали количество спичек
if(sscanf(params, "d", params[0])) return false;//Если в куче нет столько спичек
if(params[0] > 5 || params[0] < 1) return SendClientMessage(playerid, 0xFFFFFFAA, "Ошибка: Количество спичек от 1 до 5");
Matches[playerid] -= params[0];//Отнимаем указанное количество спичек
if(Matches[playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFAA, "Вы победили!");//Победа Игрока!
//Ход Льва
format(string, sizeof string, "Ход Льва | В куче осталось %d спичек", Matches[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
new Lev = Matches[playerid] % 6; //Находим остаток от деления на 6 и забиваем в переменную
if(Lev == 0) Matches[playerid] -= random(5);//Если остаток от деления на 6 = 0
else Matches[playerid] -= Lev;//Если иначе, то отнимаем отстаток от деления на 6
if(Matches[playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFAA, "Победил Лев Попов!");//Победа Льва!
//Оповещаем Игрока об его ходе
format(string, sizeof string, "Ваш ход | В куче осталось %d спичек", Matches[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
return true;
}
PHP:
#include <a_samp>
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define DialogID 1
new Matches[MAX_PLAYERS];
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[] )
{
if(dialogid == DialogID)//Юзайте switch, если оно требует. Тут просто 1 диалоги я заюзал так
{
new string[64];
if(!response) return true;
Matches[playerid] = strval(inputtext);//Устанавливаем количество спичек
SendClientMessage(playerid, 0xFFFFFFAA, "Введите: /take [1-5]");
format(string, sizeof string, "Количество спичек: %d", strval(inputtext));
SendClientMessage(playerid, 0xFFFFFFAA, string);
return true;
}
return true;
}
CMD:matches(playerid, params[] )
{
ShowPlayerDialog(playerid, DialogID, DIALOG_STYLE_INPUT, "Ним", "Введите кол-во спичек:", "V", "X");
return true;
}
CMD:take(playerid, params[] )
{
new string[64];
//Ход Игрока
if(Matches[playerid] == 0) return false;//Если не начали игру
if(Matches[playerid] < params[0]) return false;//Если не указали количество спичек
if(sscanf(params, "d", params[0])) return false;//Если в куче нет столько спичек
if(params[0] > 5 || params[0] < 1) return SendClientMessage(playerid, 0xFFFFFFAA, "Ошибка: Количество спичек от 1 до 5");
Matches[playerid] -= params[0];//Отнимаем указанное количество спичек
if(Matches[playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFAA, "Вы победили!");//Победа Игрока!
//Ход Льва
format(string, sizeof string, "Ход Льва | В куче осталось %d спичек", Matches[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
new Lev = Matches[playerid] % 6; //Находим остаток от деления на 6 и забиваем в переменную
if(Lev == 0) Matches[playerid] -= random(5);//Если остаток от деления на 6 = 0
else Matches[playerid] -= Lev;//Если иначе, то отнимаем отстаток от деления на 6
if(Matches[playerid] == 0) return SendClientMessage(playerid, 0xFFFFFFAA, "Победил Лев Попов!");//Победа Льва!
//Оповещаем Игрока об его ходе
format(string, sizeof string, "Ваш ход | В куче осталось %d спичек", Matches[playerid]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
return true;
}
Подобную игру я, около года назад, писал на C#, там совсем немного другая реализация, если желаете глянуть, то:
PHP:
using System;
using System.Windows.Forms;
namespace Matches
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int player = 0;
private void button2_Click(object sender, EventArgs e)
{
Kol.Text = Spi4ki.Text;
Hod.Text = "Ходит: Игрок";
player = 1;
}
private void button1_Click(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 1)
{
Kol.Text = Convert.ToString(Conv - 1);
Chel();
}
}
private void button3_Click(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 1)
{
Kol.Text = Convert.ToString(Conv - 2);
Chel();
}
}
private void button4_Click(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 1)
{
Kol.Text = Convert.ToString(Conv - 3);
Chel();
}
}
private void button5_Click(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 1)
{
Kol.Text = Convert.ToString(Conv - 4);
Chel();
}
}
private void button6_Click(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 1)
{
Kol.Text = Convert.ToString(Conv - 5);
Chel();
}
}
private void Prog()
{
timer1.Stop();
player = 1;
if (Convert.ToInt32(Kol.Text) <= 0) MessageBox.Show("Победил Lev_Popov!");
Hod.Text = "Ходит: Игрок";
}
private void Chel()
{
timer1.Start();
player = 2;
if (Convert.ToInt32(Kol.Text) == 0) MessageBox.Show("Вы победили!");
Hod.Text = "Ходит: Компьютер";
}
private void timer1_Tick(object sender, EventArgs e)
{
int Conv = Convert.ToInt32(Kol.Text);
if (player == 2)
{
double i = Convert.ToDouble(Kol.Text);
double h = i % 6;
if (Convert.ToDouble(h) == 0)
{
Random r = new Random();
int a = r.Next(1, 5);
Kol.Text = Convert.ToString(Conv - Convert.ToInt32(a.ToString()));
Prog();
}
else
{
Kol.Text = Convert.ToString(Conv - Convert.ToInt32(h));
Prog();
}
}
}
}
}
Автор: Лев Попов
Последнее редактирование: