Как бы для пробы делаю крестики-нолики. Проблема в том, что крестики не отрисовываются. При запуске ошибок не выдает main.lua
require "player" require "enemy" function love.load() love.graphics.setMode(240, 240) love.graphics.setBackgroundColor(255,255,255) --Координаты границ блоков(клеток) b1 = {0, 80, 0, 80} b2 = {80,160, 0,80} b3 = {160,240, 0,80} b4 = {0,80, 80,160} b5 = {80,160, 80,160} b6 = {160,240, 80,160} b7 = {0,80, 160,240} b8 = {80,160, 160,240} b9 = {160,240, 160,240} love.graphics.setColor(0,0,0) cross = love.graphics.newImage("X.png") nought = love.graphics.newImage("O.png") turn = 1 end function love.update(dt) x = love.mouse.getX y = love.mouse.getY player.update(dt) enemy.update(dt) end function love.draw() love.graphics.line(80,0, 80, 240) love.graphics.line(160,0, 160,240) love.graphics.line(0,80, 240,80) love.graphics.line(0,160, 240,160) if b1 == 1 then love.graphics.draw(cross,b1[1],b1[3]) elseif b1 == 2 then love.graphics.draw(nought,b1[1],b1[3]) end if b2 == 1 then love.graphics.draw(cross,b2[1],b2[3]) elseif b2 == 2 then love.graphics.draw(nought,b2[1],b2[3]) end if b3 == 1 then love.graphics.draw(cross,b3[1],b3[3]) elseif b3 == 2 then love.graphics.draw(nought,b3[1],b3[3]) end if b4 == 1 then love.graphics.draw(cross,b4[1],b4[3]) elseif b4 == 2 then love.graphics.draw(nought,b4[1],b4[3]) end if b5 == 1 then love.graphics.draw(cross,b5[1],b5[3]) elseif b5 == 2 then love.graphics.draw(nought,b5[1],b5[3]) end if b6 == 1 then love.graphics.draw(cross,b6[1],b6[3]) elseif b6 == 2 then love.graphics.draw(nought,b6[1],b6[3]) end if b7 == 1 then love.graphics.draw(cross,b7[1],b7[3]) elseif b7 == 2 then love.graphics.draw(nought,b7[1],b7[3]) end if b8 == 1 then love.graphics.draw(cross,b8[1],b8[3]) elseif b8 == 2 then love.graphics.draw(nought,b8[1],b8[3]) end if b9 == 1 then love.graphics.draw(cross,b9[1],b9[3]) elseif b9 == 2 then love.graphics.draw(nought,b9[1],b9[3]) end end
player.lua
player = {} function player.load() end function player.update(dt) if turn == 1 then function choose() if x >= b1[1] and x <= b1[1] and y >= b1[3] and y <= b1[4] and love.mouse.isDown("l") and b1 ~= 2 then b1 = 1 end if x >= b2[1] and x <= b2[1] and y >= b2[3] and y <= b2[4] and love.mouse.isDown("l") and b2 ~= 2 then b2 = 1 end if x >= b3[1] and x <= b3[1] and y >= b3[3] and y <= b3[4] and love.mouse.isDown("l") and b3 ~= 2 then b3 = 1 end if x >= b4[1] and x <= b4[1] and y >= b4[3] and y <= b4[4] and love.mouse.isDown("l") and b4 ~= 2 then b4 = 1 end if x >= b5[1] and x <= b5[1] and y >= b5[3] and y <= b5[4] and love.mouse.isDown("l") and b5 ~= 2 then b5 = 1 end if x >= b6[1] and x <= b6[1] and y >= b6[3] and y <= b6[4] and love.mouse.isDown("l") and b6 ~= 2 then b6 = 1 end if x >= b7[1] and x <= b7[1] and y >= b7[3] and y <= b7[4] and love.mouse.isDown("l") and b7 ~= 2 then b7 = 1 end if x >= b8[1] and x <= b8[1] and y >= b8[3] and y <= b8[4] and love.mouse.isDown("l") and b8 ~= 2 then b8 = 1 end if x >= b9[1] and x <= b9[1] and y >= b9[3] and y <= b9[4] and love.mouse.isDown("l") and b9 ~= 2 then b9 = 1 end end end end function player.draw() end
Добавлено (30.03.2013, 17:25) --------------------------------------------- Вот этот код не работает if b1 == 1 then love.graphics.draw(cross,b1[1],b1[3]) elseif b1 == 2 then love.graphics.draw(nought,b1[1],b1[3]) end По идее он считывает значение блока(в данном случае первого блока). Если равен 0, то ничего, если 1, то отрисовывается крестик, а если 2, то нолик. Вроде все правильно, однако не работает
Вот этот код не работает if b1 == 1 then love.graphics.draw(cross,b1[1],b1[3]) elseif b1 == 2 then love.graphics.draw(nought,b1[1],b1[3]) end
b1 ведь таблица, как она может оказаться равна единице? А если ты запишешь в b1 единицу, это будет уже переменная, а не таблица. Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
Охх, точно, я совсем забыл, что уже превратил блоки в таблицы их координат.
Добавлено (30.03.2013, 17:36) --------------------------------------------- Тему можно закрывать, истина была найдена
Добавлено (02.04.2013, 20:19) --------------------------------------------- Так. Время для очередного идиотского вопроса. Почему не работает?
function love.load() love.graphics.setMode(1000, 1000) love.graphics.setBackgroundColor(255,255,255) --Координаты границ блоков(клеток) coord1 = {0,80, 0, 80} coord2 = {80,160, 0,80} coord3 = {160,240, 0,80} coord4 = {0,80, 80,160} coord5 = {80,160, 80,160} coord6 = {160,240, 80,160} coord7 = {0,80, 160,240} coord8 = {80,160, 160,240} coord9 = {160,240, 160,240} b1= 0 b2 = 0 b3 = 0 b4 = 0 b5 = 0 b5 = 0 b6 = 0 b7 = 0 b8 = 0 b9 = 0 love.graphics.setColor(0,0,0) cross = love.graphics.newImage("X.png") nought = love.graphics.newImage("O.png") turn = 0 end function love.update(dt) x = love.mouse.getX() y = love.mouse.getY() function detect(coord, b) if x >= coord[1] and x <= coord[2] and y >= coord[3] and y <= coord[4] and love.mouse.isDown("l") == 1 and b ~= 2 and b ~= 1 then b = b + 1 end end detect(coord1, b1) detect(coord2, b2) detect(coord3, b3) detect(coord4, b4) detect(coord5, b5) detect(coord6, b6) detect(coord7, b7) detect(coord8, b8) detect(coord9, b9) end function love.draw() --debugging info love.graphics.print(x,20,300) love.graphics.print(y,70,300) love.graphics.print(b1,20,260) love.graphics.print(b2,40,260) love.graphics.print(b3,60,260) love.graphics.print(b4,20,270) love.graphics.print(b5,40,270) love.graphics.line(80,0, 80, 240) love.graphics.line(160,0, 160,240) love.graphics.line(0,80, 240,80) love.graphics.line(0,160, 240,160) if b1 == 1 then love.graphics.draw(cross,coord1[1],coord1[3]) elseif b1 == 2 then love.graphics.draw(nought,coord1[1],coord1[3]) end if b2 == 1 then love.graphics.draw(cross,coord2[1],coord2[3]) elseif b2 == 2 then love.graphics.draw(nought,coord2[1],coord2[3]) end if b3 == 1 then love.graphics.draw(cross,coord3[1],coord3[3]) elseif b3 == 2 then love.graphics.draw(nought,coord3[1],coord3[3]) end if b4 == 1 then love.graphics.draw(cross,coord4[1],coord4[3]) elseif b4 == 2 then love.graphics.draw(nought,coord4[1],coord4[3]) end if b5 == 1 then love.graphics.draw(cross,coord5[1],coord5[3]) elseif b5 == 2 then love.graphics.draw(nought,coord5[1],coord5[3]) end if b6 == 1 then love.graphics.draw(cross,coord6[1],coord6[3]) elseif b6 == 2 then love.graphics.draw(nought,coord6[1],coord6[3]) end if b7 == 1 then love.graphics.draw(cross,coord7[1],coord7[3]) elseif b7 == 2 then love.graphics.draw(nought,coord7[1],coord7[3]) end if b8 == 1 then love.graphics.draw(cross,coord8[1],coord8[3]) elseif b8 == 2 then love.graphics.draw(nought,coord8[1],coord8[3]) end if b9 == 1 then love.graphics.draw(cross,coord9[1],coord9[3]) elseif b9 == 2 then love.graphics.draw(nought,coord9[1],coord9[3]) end end
Вот эти крошки не выполняют свою работу Я в недоумении detect(coord1, b1) detect(coord2, b2) detect(coord3, b3) detect(coord4, b4) detect(coord5, b5) detect(coord6, b6) detect(coord7, b7) detect(coord8, b8) detect(coord9, b9) Kaan Drem Ov
function detect(coord, b) if x >= coord[1] and x <= coord[2] and y >= coord[3] and y <= coord[4] and love.mouse.isDown("l") == 1 and b ~= 2 and b ~= 1 then b = b + 1 end
divol13, проверять. не нажал ли пользователь на клетку, и если нажал, то присвоить клетке значение 1. Значение нужно, чтобы отрисовать, если клетка равна 1, то рисуется крестик, если 2, то рисуется нолик, но пока до нолика и ИИ не дошло ( Kaan Drem Ov
Тут без 100 грамм не разобраться. В Лав и конечно почти ноль, но все же что делает "b ~= 2 and b ~= 1", и почему к b прибавляется единица? Параноик с гениальным планом по захвату мира.
divol13, проверять. не нажал ли пользователь на клетку, и если нажал, то присвоить клетке значение 1.
а теперь еще раз посмотри на код
Цитата (Beatrate)
function detect(coord, b) if x >= coord[1] and x <= coord[2] and y >= coord[3] and y <= coord[4] and love.mouse.isDown("l") == 1 and b ~= 2 and b ~= 1 then b = b + 1 end end
и ответь где же здесь
Цитата (Beatrate)
то присвоить клетке значение 1
короче, кури область видимости переменных
Сообщение отредактировал divol13 - Вторник, 02 Апреля 2013, 21:50
Функция isDown возвращает только true/false, убери "== 1" и всё заработает, почти. Следующая проблема в том, что ты прибавляешь 1 к локальной переменной b, которая за пределами функции detect не существует. Сделай например так:
Код
b1 = detect(coord1, b1) ................... function detect(coord, b) if x >= coord[1] and x <= coord[2] and y >= coord[3] and y <= coord[4] and love.mouse.isDown("l") and b ~= 2 and b ~= 1 then b = b + 1 end return b end
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.