Jeśli bohater zadaje cios to zmiana ilości hp goblina musi nastąpić za pomocą ponownego przypisania ilości hp do zmiennej goblinhp, a u Ciebie tego nie ma. Jest:
... << goblinhp-bohaterobrazenia << ...
To co tutaj robisz to tworzysz zmienną anonimową w postaci uaktualnionego życia goblina, ale nie przypisujesz tej wartości do zmiennej goblinhp. Powinno być:
goblinhp -= bohaterobrazenia;
//...
... << goblinhp << ...
I jak Hipcio, słusznie zauważył, warunek wyjścia z pętli powinien być zmieniony.