Что нового

[Screeps] ММО для программистов

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ссылка на игру: https://screeps.com/ , я щас прохожу туториал :smile:
Ссылка на хабр: http://habrahabr.ru/post/264781/ , тут можно прочитать подробнее :smile:
Суть игры: вы пишите код, который управляет вашими юнитами :smile:
 

bugaj

Знающий
Сообщения
140
Репутация
11
Балин!!! я то все мечтал написать такую игру, опоздал :smile:

хотя не совсем такую )) там что то совсем трешь)

во, нашел там ссылку
http://v673.com/programmers-games/colobot-and-ceebot/

это как то поцивильнее выглядит. Общем графон нужен все равно хоть какой нибудь) ну и еще Джаву чо то нет желания учить)

ыыы
http://is.ifmo.ru/projects/tanks/ в институте целую научную работу написали по тому как делать ботов для игры )
 

Kasper

Знающий
Сообщения
70
Репутация
8
Единственный минус этой игры чтобы поиграть онлайн, а не в туториале надо платить.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Это денег стоит копейки, я заплатил 18 баксов, при лимитах в 20 цпу, это 299 дней игры. А при лимитах в 30 цпу, если верить другим юзерам, можно контролировать 10-15 комнат.


Добавлено:
Сообщение автоматически объединено:

Я кстати без знания джавы, тупо на ифах накатал колонию, которая автономно работает :smile:. Знаний AutoIt'а хватает чтобы делать рабочие колонии


Добавлено:
Сообщение автоматически объединено:

Код:
/*
 * Module code goes here. Use 'module.exports' to export things:
 * module.exports = 'a thing';
 *
 * You can import it from another modules like this:
 * var mod = require('builder'); // -> 'a thing'
 */
 
 module.exports = function (creep) {
    //console.log(Game.creeps.ControlUpgrader1.pos);
    if(creep.carry.energy == 0) {
	    console.log("Заправляюсь");
	    var sources = creep.pos.findInRange(FIND_DROPPED_ENERGY, 5);
            //if (sources.length) {
                //if (sources[0].energy > 200) {
            	//	creep.moveTo(sources[0]);
            	//	creep.pickup(sources[0]);
                //}
                //else{
            		creep.moveTo(Game.spawns.Spawn1);
            		Game.spawns.Spawn1.transferEnergy(creep);
                //}
            //}
            //else{
            //    creep.moveTo(Game.spawns.Spawn1);
            //	Game.spawns.Spawn1.transferEnergy(creep);
            //}
            
	}
	else {
		var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
		if(targets.length) {
		    console.log("Строю");
			creep.moveTo(targets[0]);
			creep.build(targets[0]);
		}
		else {
		    //////
//            var roadToRepair = creep.pos.findClosest(FIND_STRUCTURES, {
            var road = Game.spawns.Spawn1.room.find(FIND_STRUCTURES, {
                filter: { structureType: STRUCTURE_ROAD }
            });
            if (road.length > 0) {
                for (var i = 0; i<road.length; i++) {
                    if (road[i].hits < road[i].hitsMax-200){
                        creep.moveTo(road[i]);
                        creep.repair(road[i]);
                        console.log("Ремонтирую дорогу"+road[i].pos);
                        return 0;
                    }
                }
            }
            else{
                //console.log("ищу стены");
                var wall = Game.spawns.Spawn1.room.find(FIND_STRUCTURES, {
                    filter: { structureType: STRUCTURE_WALL }
                });
                if (wall.length > 0) {
                    for (var i = 0; i<wall.length; i++) {
                        if (wall[i].hits < wall[i].hitsMax/2){
                            creep.moveTo(wall[i]);
                            creep.repair(wall[i]);
                            console.log("Ремонтирую стену"+wall[i].pos);
                            return 0;
                        }
                    }
                }
                else{
                    //следующее действие
                }
            }

    
            
            
            ////////
            //else{
                //console.log("Заправляю контроллер");
                //creep.moveTo(Game.creeps.ControlUpgrader1.pos);
                //creep.transferEnergy(Game.creeps.ControlUpgrader1);
            //}
		}
	}
}

Вот так выглядит основная часть кода. Тупо по справке нацарапал :smile:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Та как бы... Мне войнушки порядком надоели. А кооперативные проекты в игре есть? Можно создать клан и всем вместе построить что-нибудь эдакое? :robot:
Ну хотя бы договориться с соседями, охранять общий периметр, а соседей считать друзьями.
:gathering: :wall_brake:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Дак это песочница, как договоришься с людьми. В коде есть возможность для реализации такого плана.
 

Kasper

Знающий
Сообщения
70
Репутация
8
Я единственное что не понял т.к. это как апгрейднутся
Код:
Game.creeps.ControlUpgrader1.pos
Что у тебя в pos записано? И вообще как апгрейднуть контролер или где его достать ?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я тоже долго не понимал пытаясь апгрейднуться из консоли. Апгрейдиться надо из основного скрипта.
Game.creeps.ControlUpgrader1 - Это ссылка на объект крипа с именем ControlUpgrader1, в этом объекте есть ввся инфа о нем, имя, позиция, доступ к его области памяти и прочее. в pos хранятся его текущие x,y координаты на карте. Игра сама записывает их туда каждый цикл.
А эта команда:
Код:
creep.moveTo(Game.creeps.ControlUpgrader1.pos);
Отправляет текущего крипа записанного в creep к крипу ControlUpgrader1


Добавлено:
Сообщение автоматически объединено:

Вот кусок кода, который управляет крипом с ролью ControlUpgrader
Код:
	if(creep.memory.role == 'ControlUpgrader') {
	    if(creep.carry.energy == 0) {
	        //var sources = creep.room.find(FIND_DROPPED_ENERGY);
	        var sources = creep.pos.findInRange(FIND_DROPPED_ENERGY, 5);
            if (sources.length) {
        		creep.moveTo(sources[0]);
        		creep.pickup(sources[0]);
            }
	    }
	    else {
    	    creep.moveTo(creep.room.controller);
            creep.upgradeController(creep.room.controller);
	    }
	}
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Какие-то вы вещи такие обсуждаете... :shok:
Мысль вводить команды из консоли не возникала вообще. Вот только сижу думаю как же ж планировать постройку новых зданий и выбирать место для постройки. :scratch:
А контроллер я ещё ни разу не апгрейднул. 18$ жалко (да и 10$ тоже жалко). Поэтому гоняю симулятор. Какой на апгрейд контроллера?! Вы воевать научились??? :shooting1:
 

Kasper

Знающий
Сообщения
70
Репутация
8
Ну я вроде понял как понял
Создаешь защитника
Код:
Game.spawns.Spawn1.createCreep( [TOUGH, ATTACK, MOVE, MOVE], 'Guard1', { role: 'guard' } );
И потом пишешь в главном скрипте защищать
Код:
	if(creep.memory.role == 'guard') {
	var targets = creep.room.find(FIND_HOSTILE_CREEPS);
    	if(targets.length) {
    		creep.moveTo(targets[0]);
    		creep.attack(targets[0]);
    	}
    	
    }
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
C2H5OH сказал(а):
Какие-то вы вещи такие обсуждаете... :shok:
Мысль вводить команды из консоли не возникала вообще. Вот только сижу думаю как же ж планировать постройку новых зданий и выбирать место для постройки. :scratch:
А контроллер я ещё ни разу не апгрейднул. 18$ жалко (да и 10$ тоже жалко). Поэтому гоняю симулятор. Какой на апгрейд контроллера?! Вы воевать научились??? :shooting1:
В игре, без апгрейда контроллера, ты не сможешь строить нормальных крипов. Базовая максимальная стоимость крипов 300. С крипами 300 все что надо делать - это поскорее апнуть контроллер, и апать его надо все время ибо это расширяет максимальную стоимость крипа которого ты можешь построить. Я например щас строю таких крипов

Базовый крип
[WORK, WORK, MOVE, MOVE], 'Worker1' ); 300
[CARRY, CARRY, CARRY, CARRY, MOVE, MOVE], 'Hauler1' ); 300

Крип которого можно построить на 3-м уровне контроллера
[CARRY, CARRY, CARRY, CARRY, CARRY, CARRY, CARRY, CARRY, MOVE, MOVE, MOVE], 'Hauler2' ); 550
[WORK,WORK,WORK,WORK,WORK, CARRY, CARRY, CARRY, MOVE, MOVE, MOVE], 'Builder1' ); 800
[WORK,WORK,WORK,WORK,WORK,WORK,WORK, CARRY, MOVE], 'ControlUpgrader1' ); 800

А могу еще таких:
[WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK, CARRY, MOVE] ;1500 5-й лвл контроллера

Чем выше контроллер тем сильнее война ты можешь построить.


Добавлено:
Сообщение автоматически объединено:

Вы имейте ввиду, если у вас например 3 война, и вы пишете конструкцию типа этой:
Код:
	if(creep.memory.role == 'guard') {
	var targets = creep.room.find(FIND_HOSTILE_CREEPS);
    	if(targets.length) {
    		creep.moveTo(targets[0]);
    		creep.attack(targets[0]);
    	}
    	
    }

То для каждого крипа эта команда выполнится по разу. Тоесть одну и ту же команду, вы выполните 3 раза, при этом каждый из 3-х крипов, кинется атаковать одногу и туже цель.
У меня пока у самого так, но лучше считывать ситуацию на карте, распределять команды в памяти, и каждым крипом обращаться в память в поиске своей команды. Вы если документацию посмотрите, в игре есть такой ресурс как "процессорное время", и каждая команда имеет свою ресурсоемкость. Если писать скрипт абыкак, не стесняясь каждый раз использовать ресурсоемкие команды, то в платной игре вы получите предупреждение что вы превышаете лимит своего CPU. Вот CPU то уже и стоит денег, я играю на минимальном лимите 20CPU (при покупке за 18 баксов это 300 дней игры), и уже столкнулся с тем что надо менять логику на другую структуру, иначе скрипт будет жрать все больше и больше цпу :smile:


Добавлено:
Сообщение автоматически объединено:

Меня вынесли тут же как упала 3-х дневная защитная стена, добавил модуль для гвардов, жду результата :D
 
Верх