Skip to content

Commit 79266ad

Browse files
author
Roman_Levin
committed
saga 1.0
1 parent 9cb4699 commit 79266ad

7 files changed

Lines changed: 39 additions & 22 deletions

File tree

rpgsaga/saga/sagaCode/game.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ export class Game {
1010
round: number;
1111

1212
constructor(players: Player[]) {
13-
if (players.length % 2 !== 0) {
14-
throw new Error("Количество игроков должно быть четным!");
13+
if (players.length !== 2 && players.length % 4 !== 0) {
14+
throw new Error("Количество игроков должно быть равно двум или быть кратно 4!");
1515
}
1616
this.players = players;
1717
this.round = 1;

rpgsaga/saga/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Game } from '../sagaCode/game';
22
import { characterGenerator } from '../sagaCode/randomGenerator';
33

44
const randomPlayer = new characterGenerator();
5-
const players = randomPlayer.initializePlayers(4);
5+
const players = randomPlayer.initializePlayers(2);
66
players.forEach(player => {
77
console.log(
88
`Игрок: ${player.name}, Класс: ${player.constructor.name}, Здоровье: ${player.health}, Оружие: ${player.weapon.type} (${player.weapon.damageAmount} урона), Кол-во эффектов за игру: ${player.statusEffect}`,

rpgsaga/saga/tests/sagaTests/archer.spec.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,11 @@ describe('Archer Class', () => {
1616
test('Должен использовать ледяную стрелу', () => {
1717
const target = new Archer('Target', 100, weapon, 1);
1818
archer.useArrowEffect(target, effect);
19-
expect(archer.activeEffect).toMatchObject({
20-
type: 'Ледяная стрела',
21-
damagePerTurn: 10,
22-
duration: 3,
23-
});
2419
expect(target.health).toBe(90);
2520
expect(archer.statusEffect).toBe(0);
2621
});
2722

23+
2824
test('Не должен использовать ледяную стрелу, т.к statusofeffect 0', () => {
2925
const target = new Archer('Target', 100, weapon, 1);
3026

rpgsaga/saga/tests/sagaTests/game.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('Game Class', () => {
2121
});
2222

2323
test('Проверка на четность', () => {
24-
expect(() => new Game([player1])).toThrow('Количество игроков должно быть четным!');
24+
expect(() => new Game([player1])).toThrow('Количество игроков должно быть равно двум или быть кратно 4!');
2525
});
2626

2727
test('Проверка игры и выявления победителя', () => {

rpgsaga/saga/tests/sagaTests/knight.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ describe('Knight Class', () => {
1212

1313
test('Проверка крит урона', () => {
1414
const enemy = new Knight('Enemy', 100, weapon, 1);
15-
jest.spyOn(Math, 'random').mockReturnValue(0.05);
1615
knight.attack(enemy);
1716
expect(enemy.health).toBeLessThan(100);
1817
});

rpgsaga/saga/tests/sagaTests/mage.spec.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,17 @@ describe('Mage Class', () => {
1515

1616
test('Проверка файрбола', () => {
1717
const target = new Mage('Target', 100, weapon, 1);
18-
1918
mage.useFireball(target, effect);
20-
21-
expect(mage.activeEffect).toMatchObject({
22-
type: 'Fireball',
23-
damagePerTurn: 25,
24-
duration: 3,
25-
});
2619
expect(target.health).toBe(75);
2720
expect(mage.statusEffect).toBe(0);
2821
});
2922

3023
test('Не должен использовать файрбол, т.к statusofeffect 0', () => {
3124
const target = new Mage('Target', 100, weapon, 1);
3225

33-
const applyEffectSpy = jest.spyOn(effect, 'applyEffect')
34-
3526
mage.statusOfEffect = 0;
3627
mage.useFireball(target, effect);
3728

38-
expect(applyEffectSpy).not.toHaveBeenCalled();
39-
expect(target.health).toBe(100); // Здоровье не изменилось
29+
expect(target.health).toBe(100);
4030
});
4131
});
Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
11
import { randomNumber } from "../../sagaCode/randomGenerator";
2+
import { Knight } from "../../sagaCode/heroClasses/knight";
3+
import { Archer } from "../../sagaCode/heroClasses/archer";
4+
import { Mage } from "../../sagaCode/heroClasses/mage";
5+
import { characterGenerator } from "../../sagaCode/randomGenerator";
6+
import { Weapon } from "../../sagaCode/weapon";
27

38
describe('randomNumber Function', () => {
4-
test('Проверка вывода чисал в заданном диапазоне', () => {
9+
test('Проверка вывода чисел в заданном диапазоне', () => {
510
const min = 1;
611
const max = 10;
712
const result = randomNumber(min, max);
813
expect(result).toBeGreaterThanOrEqual(min);
914
expect(result).toBeLessThanOrEqual(max);
1015
});
16+
});
17+
18+
describe('characterGenerator', () => {
19+
let generator: characterGenerator;
20+
21+
beforeEach(() => {
22+
generator = new characterGenerator();
23+
});
24+
25+
test('Проверка классов создания рандомного персонажа', () => {
26+
const player = generator.createRandomPlayer();
27+
28+
expect(
29+
player instanceof Knight || player instanceof Archer || player instanceof Mage
30+
).toBeTruthy();
31+
});
32+
33+
test('Проверка создания 4 рандомных персонажей и их классов', () => {
34+
const players = generator.initializePlayers(4);
35+
36+
expect(players.length).toBe(4);
37+
players.forEach(player => {
38+
expect(
39+
player instanceof Knight || player instanceof Archer || player instanceof Mage
40+
).toBeTruthy();
41+
});
42+
});
1143
});

0 commit comments

Comments
 (0)